Android Webview - キャッシュを完全にクリアする 質問する

Android Webview - キャッシュを完全にクリアする 質問する

アクティビティの 1 つに WebView があり、Web ページを読み込むと、ページは Facebook からバックグラウンド データを収集します。

ただし、私が見ているのは、アプリケーションを開いて更新するたびに、アプリケーションに表示されるページが同じであるということです。

WebView がキャッシュを使用しないように設定し、WebView のキャッシュと履歴をクリアしてみました。

私はここでの提案にも従いました:WebView のキャッシュを空にするにはどうすればいいですか?

しかし、どれもうまくいきません。これは私のアプリケーションの重要な部分なので、この問題を克服できるアイデアを持っている人はいますか。

    mWebView.setWebChromeClient(new WebChromeClient()
    {
           public void onProgressChanged(WebView view, int progress)
           {
               if(progress >= 100)
               {
                   mProgressBar.setVisibility(ProgressBar.INVISIBLE);
               }
               else
               {
                   mProgressBar.setVisibility(ProgressBar.VISIBLE);
               }
           }
    });
    mWebView.setWebViewClient(new SignInFBWebViewClient(mUIHandler));
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.clearHistory();
    mWebView.clearFormData();
    mWebView.clearCache(true);

    WebSettings webSettings = mWebView.getSettings();
    webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);

    Time time = new Time();
    time.setToNow();

    mWebView.loadUrl(mSocialProxy.getSignInURL()+"?time="+time.format("%Y%m%d%H%M%S"));

そこで最初の提案を実装しました(ただし、コードは再帰的になるように変更しました)

private void clearApplicationCache() {
    File dir = getCacheDir();

    if (dir != null && dir.isDirectory()) {
        try {
            ArrayList<File> stack = new ArrayList<File>();

            // Initialise the list
            File[] children = dir.listFiles();
            for (File child : children) {
                stack.add(child);
            }

            while (stack.size() > 0) {
                Log.v(TAG, LOG_START + "Clearing the stack - " + stack.size());
                File f = stack.get(stack.size() - 1);
                if (f.isDirectory() == true) {
                    boolean empty = f.delete();

                    if (empty == false) {
                        File[] files = f.listFiles();
                        if (files.length != 0) {
                            for (File tmp : files) {
                                stack.add(tmp);
                            }
                        }
                    } else {
                        stack.remove(stack.size() - 1);
                    }
                } else {
                    f.delete();
                    stack.remove(stack.size() - 1);
                }
            }
        } catch (Exception e) {
            Log.e(TAG, LOG_START + "Failed to clean the cache");
        }
    }
}

しかし、それでもページの表示内容は変わりません。デスクトップ ブラウザーでは、WebView で生成された Web ページとは異なる HTML コードが表示されるので、WebView がどこかにキャッシュされていることがわかります。

IRC チャネルで、URL 接続からキャッシュを削除する修正方法を教えていただきましたが、それを WebView に適用する方法はまだわかりません。

http://www.androidsnippets.org/snippets/45/

アプリケーションを削除して再インストールすると、Web ページを最新の状態 (つまり、キャッシュされていないバージョン) に戻すことができます。主な問題は、Web ページ内のリンクに変更が加えられるため、Web ページのフロント エンドはまったく変更されないことです。

ベストアンサー1

キャッシュをクリアするためのさらにエレガントでシンプルな解決策を見つけました

WebView obj;
obj.clearCache(true);

http://developer.android.com/reference/android/webkit/WebView.html#clearCache%28boolean%29

キャッシュをクリアする方法を見つけようとしましたが、上記の方法で実行できたのはローカル ファイルを削除することだけで、RAM をクリアすることはできませんでした。

API clearCache は、Web ビューによって使用される RAM を解放し、Web ページを再度読み込むことを義務付けます。

おすすめ記事