【问题标题】:Prevent Android WebView caching data防止 Android WebView 缓存数据
【发布时间】:2011-09-24 07:34:24
【问题描述】:

是否可以防止 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");

这似乎具有预期的效果,并且文件似乎不会再次重新创建以供使用。假设是这种情况是否安全?

【问题讨论】:

  • 你有没有运气阻止缓存?

标签: android webview


【解决方案1】:

此页面上的注释让我相信他们不希望您可以很好地访问缓存:

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);

祝你好运!

【讨论】:

  • 我设法通过简单地调用webView.clearCache(true) 来清除它,然后重新加载webView.loadData()。如果不重新加载新内容,它似乎无法正常工作。
  • wv.getSettings().setAppCacheMaxSize(1);已弃用!
【解决方案2】:

在我的应用程序中(在 Android 4.2.2 上)我在 webview 上加载了一个网页,其中包含可以在运行时更改的图像(我在保留路径的同时替换图像)。马特的解决方案(一)

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

对我有用,解决方案(2)不! 干杯

【讨论】:

    猜你喜欢
    • 2010-11-25
    • 1970-01-01
    • 2013-02-12
    • 2017-01-19
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    相关资源
    最近更新 更多