安卓使用WebView清除緩存

Android 清除WebView緩存
最近項目中需要用WebView顯示內容,需要使用JavaScript去交互,但是每次加載都加載到了緩存的數據,這裏記錄一下如何去清除WebView緩存。
首先要了解一些概念。

WebView的緩存可以分爲頁面緩存和數據緩存:

1,頁面緩存: >指加載一個網頁時的html、JS、CSS等頁面或者資源數據。 >這些緩存資源是由於瀏覽器的行爲而產生,開發者只能通過配置HTTP響應頭影響瀏覽器的行爲才能間接地影響到這些緩存數據。 >緩存的索引存放在/data/data/package_name/databases下。 >文件存放在/data/data/package_name/cache/xxxwebviewcachexxx下。

2,數據緩存 : >數據緩存分爲AppCache和DOM Storage兩種。 >這些緩存資源是由開發者的直接行爲而產生,所有的緩存數據都由開發者直接完全地掌控。 >Android中Webkit使用一個db文件來保存AppCache數據(my_path/ApplicationCache.db) >Android中Webkit會爲DOM Storage產生兩個文件(my_path/localstorage/http_h5.m.taobao.com_0.localstorage和my_path/localstorage/Databases.db)。

那既然瞭解了,怎麼清除呢:
以下是百度出來的答案:

1.webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); 2.context.deleteDatabase(“WebView.db”); 3.context.deleteDatabase(“WebViewCache.db”);
4.webView.clearCache(true); 
6.webView.clearFormData(); 
7.getCacheDir().delete(); 
8.用File的delete方法刪除緩存文件夾;

老實說,對我的問題,沒多大用,還是那句話,有事請Google
其實如果你只是想要每次用webView.loadUrl(url)加載新的頁面顯示,那麼調用webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE)就可以實現了,並不需要去刪除緩存文件什麼的。
但是我的項目中使用了JavaScript的交互,而JavaScript的加載是通過頭文件去獲取加載的,所以每次我去獲取新的頁面的時候,雖然頁面是新的,但是頭文件中的數據還是old的,所以每次加載到的js都是old的。那麼如何去做呢?
上面提到這個頭文件是瀏覽器HTTP相應頭去獲取的,開發者只能間接的影響,並不能控制。
所以單獨的webView.clearCache(true)是不能成功的,還需要清除webView的Cookie才行。
所以我最終的解決方法是在Activity的onDestroy()方法中添加如下代碼:

@Override
protected void onDestroy() {
    super.onDestroy();
    //清空所有Cookie
    CookieSyncManager.createInstance(QzmobileApp.getContext());  //Create a singleton CookieSyncManager within a context
    CookieManager cookieManager = CookieManager.getInstance(); // the singleton CookieManager instance
    cookieManager.removeAllCookie();// Removes all cookies.
    CookieSyncManager.getInstance().sync(); // forces sync manager to sync now

    webView.setWebChromeClient(null);
    webView.setWebViewClient(null);
    webView.getSettings().setJavaScriptEnabled(false);
    webView.clearCache(true);
}

CookieSyncManager已經@Deprecated,但是requires API level 21,所以……
PS:其實最好是把清除緩存的代碼都封裝到一個類,然後調用靜態方法即可。
大家有類似問題的可以試試,有問題的小夥伴請留言哈~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章