2011-09-24 135 views
16

是否可以阻止WebView緩存/ data/data/???/cache/webViewCache中的數據?我給自己定了以下的WebSettings但緩存文件夾仍然使用:阻止Android WebView緩存數據

webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); 
webSettings.setAppCacheEnabled(false); 

我注意到緩存文件將在應用程序退出刪除或當應用程序進入後臺,但我更喜歡對他們來說根本就沒有創造。此外,我想阻止使用在/ data/data/???/database中找到的webview.db & webviewCache.db。目前,我刪除數據庫就像這樣:

context.deleteDatabase("webview.db"); 
context.deleteDatabase("webviewCache.db"); 

這似乎收到預期的效果和文件不會出現使用再次重建。假設情況是否安全?

+0

你有沒有預防緩存的運氣? – omega

+0

恐怕不是。 – dbotha

回答

40

此頁面上的音符使我相信他們不希望你有良好的訪問緩存:

http://developer.android.com/reference/android/webkit/CacheManager.html

據我所知,有(至少)兩個如何保持緩存。我沒有在應用程序中寫入任何內容,所以不能保證:

(1)每次WebView完成頁面時,請清除緩存。像這樣的事情在你的WebViewClient:

@Override 
public void onPageFinished(WebView view, String url) { 
    super.onPageFinished(view, url); 
    view.clearCache(true); 
} 

(2)如果你沒有太在意什麼是存儲,而只是希望最新的內容,你也許可以通過設置合適的HTTP頭文件來實現這一loadUrl(顯然你想要對你的服務器進行測試)。此外,這是唯一可用的Android API 8+

Map<String, String> noCacheHeaders = new HashMap<String, String>(2); 
    noCacheHeaders.put("Pragma", "no-cache"); 
    noCacheHeaders.put("Cache-Control", "no-cache"); 
    view.loadUrl(url, noCacheHeaders); 

也許你想這一點,但也許還要設置的WebView緩存大小的東西少。我不知道如果0將工作,所以也許1:

wv.getSettings().setAppCacheMaxSize(1); 

好運!

+0

我設法通過簡單地調用'webView.clearCache(true)'來清除它,然後重新加載'webView.loadData()'。沒有重新加載新的東西似乎沒有工作。 – Nevermore

+0

wv.getSettings()。setAppCacheMaxSize(1);已棄用! – GeneralKimi

12

在我的應用程序中(在Android 4.2.2上),我在webview上加載了一個帶有圖像的網頁,我可以在運行時更改圖像(保留路徑時替換圖像)。馬特的解決方案(1)

@Override 
public void onPageFinished(WebView view, String url) { 
    super.onPageFinished(view, url); 
    view.clearCache(true); 
} 

適合我,解決方案(2)不! 乾杯

+0

感謝您分享哪個解決方案效果最好! – Matt