原文:https://blog.csdn.net/liwei123liwei123/article/details/52624826
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:其實最好是把清除緩存的代碼都封裝到一個類,然后調用靜態方法即可。
大家有類似問題的可以試試,有問題的小伙伴請留言哈~