为啥android Webview默认不检查缓存?

Posted

技术标签:

【中文标题】为啥android Webview默认不检查缓存?【英文标题】:Why doesn't android Webview check for cache by default?为什么android Webview默认不检查缓存? 【发布时间】:2012-02-13 14:44:15 【问题描述】:

我有一个使用应用程序缓存的 webview。我启动了连接到网络的应用程序以加载/缓存页面。现在,在关闭 wifi(和 3g - 无网络连接)并启动应用程序后,我会看到“android 无法加载页面”页面。奇怪的是,如果我然后重新加载 webview,它会从缓存中加载页面。连接不上网络为什么不从缓存中加载这个页面?

我正在使用 html5 应用程序缓存和 cache.manifest。这是我启用此功能的 webview 代码:

webview.getSettings().setDomStorageEnabled(true);
webview.getSettings().setAppCacheMaxSize(1024*1024*8);
webview.getSettings().setAppCachePath("/data/data/com.my.package/cache");
webview.getSettings().setAllowFileAccess(true);
webview.getSettings().setAppCacheEnabled(true);

我尝试添加:

weview.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 

但它没有帮助。

【问题讨论】:

当您关闭 wifi 和/或 3g 时,您现在是否正在杀死应用程序的实例,除非您正在积极检查,否则它不会知道从缓存中加载,因为它已经从网络加载,这这就是为什么当你重新加载 webview 时它会正确加载。 @JaredBurrows 我不明白你的意思,但流程是这样的: 1. 从网络加载应用程序。 1a。页面被缓存。 2.杀死应用程序。 3.杀死wifi(设备上没有3g)4.加载应用程序。 4a。页面显示“Android 无法加载页面” 5. 刷新 webview。 5a。页面从缓存正确加载 如何刷新网页视图? 只需一个按钮再次调用loadUrl。这实际上与onCreate 中的调用相同。 您可以随时检查网络连接然后重新加载,还是在实例被杀死后简单地在 onResume 中重新加载? 【参考方案1】:

检查您请求的 URL 是否不是重定向。如果是,缓存也将指向该重定向,WebView 不会从缓存中读取结果重定向。

我花了一些时间才弄清楚这就是我的情况。

【讨论】:

以上是关于为啥android Webview默认不检查缓存?的主要内容,如果未能解决你的问题,请参考以下文章

检查url是不是被缓存webview android

android Cache——webview的缓存处理

android的webview缓存相关知识收集

为啥多个 WebView 不能共享缓存?

android中 如何清理webview缓存?

Android 仅加载缓存不起作用。离线显示 WebView