为啥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默认不检查缓存?的主要内容,如果未能解决你的问题,请参考以下文章