3

インターネットからのWebページでWebViewのキャッシュをプリロードしたいのですが。これは非同期で実行し、他のUIインタラクションを妨げないように非表示にする必要があります。プリロードの目的は、オプションのボタンクリックによってWebViewが表示された場合に、後続のネットワーク呼び出しを回避することです(最終的には表示を高速化するため)。

WebページにはJavascriptとAJAXが含まれているため、HttpClientのようなものを使用してキャッシュをプリロードすることは機能しないと思います。AsyncTaskでWebViewのloadUrl()を使用することも検討しましたが、これがメインUIスレッドと競合していることがわかります。

同様の状況にある人は、バックグラウンドのプリロード/キャッシングを実行する方法を見つけましたか?

4

1 に答える 1

6

WebViewデフォルトで別のスレッドにデータをロードしているため、AsyncTask を使用する必要はありません。非表示の WebView を作成して を呼び出すだけloadUrl()です。

複数の URL をプリロードする場合は、WebViewClientand オーバーライドを使用してonPageFinished()、最初の URL が完了したことを検出できます。作業が終わったら、WebViewガベージ コレクションができるように参照を削除してください。

最後に、WebView使用可能な場合に常にキャッシュされたバージョンの URL を使用するようにするには、次のように呼び出します。

webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK).
于 2013-03-25T16:30:48.053 に答える