2017-01-06 20 views
0

Androidでウェブビューを有効または無効にするための最適な方法についてアドバイスをお願いしますか?Androidでウェブビューを有効/無効にするためのベストプラクティス

私はこのアプリケーションを持っています(ウェブビューを使用して)ポップアップしてUIの80%をカバーするURLを開くことができます。ユーザーがアプリの別のページに移動すると、必要に応じて再度再度開くことができます。

はここで、これは私が

を閉じる方法
private void closeWebView() { 
    Log.d(LOGTAG, "closing webview..."); 

    // Destroy WebView if it exists 
    if (this.navBrowserWV != null) { 
     this.navBrowserWV.stopLoading(); 
     this.navBrowserWV.loadUrl("about:blank"); 
     this.navBrowserWV.clearHistory(); 
     this.navBrowserWV.clearCache(true); 
     this.navBrowserWV.pauseTimers(); 
     this.navBrowserWV.setVisibility(View.GONE); 
    } 
} 

あるコード

private WebViewInterface webViewInterface = new WebViewInterface() { 
    @Override 
    public void onOpenURL(String url) { 
     navBrowserWV.setVisibility(View.VISIBLE); 
     navBrowserWV.getSettings().setJavaScriptEnabled(true); 
     navBrowserWV.setWebViewClient(new WebViewClient() { 
      @Override 
      public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){ 
       handler.proceed(); 
      } 
     }); 
     navBrowserWV.loadUrl(url); 
    } 
}; 

の抜粋ですこの実装での問題は、私はそれを閉じたときに、それは最初にページを正しく表示されますが、ということですURLを使ってWebビューを再度開くと、ページはもはや白い背景にはならない(ロガーのエラーはない)。

この問題を解決する方法については、お問い合わせください。ありがとう

答えて

0

最後に、インターネットで回答を掘り下げてから、私はこの古い投稿をAndroid webview [link]の殺害に関して発見しました。

WebViewを強制終了する方法はありません(常にプロセス内で実行され、ATMでは何もできません)。 WebViewに偽のページをロードするように伝えるだけでいいのですが、私にはわかりました。 this.navBrowserWV.loadUrl("about:blank");

これは今動作します!ウェブサイト

4.1 .getSettings().setJavaScriptEnabled() Inhalt 

から

引用さて、あなたは短いで、WebViewのの設定でJavaScriptを無効にすると瞬時に効果を持っていると思うだろう:それはしていません。ページを再読み込みした後には、JavaScriptはもうなくなります。ページはまだレンダリングされているので、設計上はうまくありません。

4.2 .stopLoading() Inhalt 

XHR「負荷」別のサーバーからの何かが、あなたが呼び出す「webview.stopLoading()」効果を持っているだろうと思うかもしれないので。つまり、そうではありません。 HTMLファイル内に含まれているリソースでのみ動作します。とにかく、アクティビティを再開した後にXHRを再開するための "startLoading()"メソッドがないので、そうではないかもしれません。 1が考えるかもしれない最後の手段として

4.3 .destroy() Inhalt 

「(破壊)」という事をINGの、そして真のに十分な、WebViewの自体は、それ以降アクセスできません。そのスレッドは、要するに

4.4 .pauseTimers()/resumeTimers() Inhalt 

...しかし、広大なRAM空間のどこかにゾンビとして存在し続け、また、XHRリクエストを送信し続ける:いいえ、動作しません。 JavaScriptタイマーを制御するのではなくて、これらのメソッドが何であるか分かりません。プレーンなHTMLのAFAIKはありません。

アップデート:タイマーだけの場合、これらの関数は2.3.5以上で動作しているように見えますが、関数を呼び出すときにタイマーがアクティブでない場合は無駄です。私の使用例:XHRがアクティブである間にアプリケーションを一時停止すると(次のXHR呼び出しをスケジュールする実行中のタイマーの代わりに)何も起こらず、次のタイマーは妨げられずに続けられます。

私はこれが私と同じ問題を抱えている人に役立つことを願っています。

関連する問題