防止Android WebView缓存数据

17

如何防止 WebView 缓存数据到 /data/data/???/cache/webViewCache 目录下?我已经在 WebSettings 中设置了以下内容,但缓存文件夹仍然被使用:

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

我注意到缓存文件在应用程序退出或进入后台时被删除,但我更希望它们根本不被创建。此外,我想防止使用位于/data/data/???/database中的webview.db和webviewCache.db。我目前是这样删除数据库的:

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

这似乎产生了期望的效果,文件似乎没有重新创建以供使用。可以安全地假设这是正确的吗?


你有没有成功地防止缓存? - omega
2个回答

44
这页上的注释让我觉得他们不想让你轻易地访问缓存:

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) 如果您不太关心存储的内容,只想获取最新的内容,您可以通过在loadUrl上设置正确的http头来实现这一点(显然,您需要针对您的服务器进行测试)。此外,这仅适用于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);

祝你好运!


2
我成功地通过简单调用 webView.clearCache(true) 然后重新加载 webView.loadData() 来清除它。如果不重新加载新的内容,似乎无法正常工作。 - Nevermore
wv.getSettings().setAppCacheMaxSize(1); 已经过时了! - Sinan Dizdarević

13
在我的应用程序中(在Android 4.2.2上),我在Webview上加载一个Web页面,其中包含可以在运行时更改的图像(我替换图像但保留路径)。Matt的解决方案(1)
@Override
public void onPageFinished(WebView view, String url) {
    super.onPageFinished(view, url);
    view.clearCache(true);
}

对我有效的是解决方案(1),而不是解决方案(2)!干杯!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接