如何使Android WebView清除缓存?

时间:2016-01-03 02:26:37

标签: android caching webview

这是我的情景。我正在使用WebView在应用程序中显示我的移动就绪网站。我们会定期更新我们的网站并自动清除我们的网站缓存,以便访问者获得我们网站的最新版本而不是陈旧版本。我注意到有时WebView正在提供旧内容 - 它有时不会加载我们网站的新版本。因此,我正在寻找一种方法来强制WebView显示新内容。

我知道我可以完全禁用WebView缓存并强制它每次从我们的服务器抓取页面,但这样效率很低。我想要缓存页面是最新版本时使用的缓存;如果不是,则不应使用缓存。

我能想到这样做的唯一方法是手动清除缓存,如下所示:

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

但是,再次,这是低效的 - 没有必要在每次页面查看后清除整个缓存。我的问题是,有没有办法清除缓存的HTML文件并留下CSS / JS等?这将是一个很好的折衷方案,总是清除缓存和有时服务陈旧的内容。通过在每个页面视图之后仅删除缓存的HTML文件,WebView被迫从我的服务器中获取最新的HTML页面,而无需重新加载CSS或JS。

更好的是,为了节省浪费不必要的处理能力,有没有办法只从缓存中删除用户所在的特定页面?例如。加载google.com后,google.com的缓存HTML页面(但不包括CSS,JS等)将被删除,以便下次加载google.com时,会抓取最新版本。

谢谢!

2 个答案:

答案 0 :(得分:4)

在html代码中为js / css文件链接添加一个参数,可以是日期时间或版本字符串,如:

<link rel='stylesheet' href='style/jquery.mobile-1.3.2.min.css?ver=1.3.2'>
<script src="js/jquery-1.8.3.min.js?ver=1.8.3"></script>
<script src="js/jquery.mobile-1.3.2.min.js?ver=1.3.2"></script>
<script src="js/my_script.js?ver=201603111428"></script>

当您的脚本或样式表文件更新时,只需更改为新参数值,然后webview会将其视为新网址并重新加载。

答案 1 :(得分:4)

mWebView.getSettings().setAppCacheEnabled(false);
mWebView.clearCache(true);
mWebView.loadUrl("about:blank");
mWebView.reload();
mWebView.loadUrl("http:xxxxxxx");

我也在寻找解决方案,但对我来说唯一有用的就是这个命令。