我正在运行我的应用程序,该应用程序具有不同活动的webview,他们正在加载在线页面,问题是每次活动打开时,webview需要几秒钟才能加载页面,并且页面无法离线使用。 / p>
我一直在寻找一个解决方案,其中webview将始终访问该网站的离线副本,该应用程序将每24小时下载并替换本地网站。
我觉得这很简单 感谢
答案 0 :(得分:0)
我看到了一些解决这个问题的潜在解决方案。
第一个也是最简单的方法是更改WebView的缓存模式,以便强制从缓存加载。这样它将尝试从缓存加载,如果没有缓存任何资源,那么它将进行网络加载。这可以通过使用:
简单地完成WebView webView; // initialized somewhere
webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
理论上,如果WebView已经加载一次并且不需要更新,则可以使用LOAD_CACHE_ONLY
,否则可以使用LOAD_DEFAULT
。使用LOAD_CACHE_ELSE_NETWORK
肯定会加快加载时间,但它仍然可能会从网络中加载一些东西。
然而,在实践中,我已经看到缓存设置不能像我希望的那样一致地工作。
另一个更强大的解决方案是使用WebView具有的Web存档功能。我自己没有使用过这个解决方案,but you can read about it in this question.
基本上,您可以使用以下方法保存WebView的内容:
WebView webView; // initialized somewhere
webView.loadUrl("http://blahblahblah.com"); // URL to save
Context context = this;
String pathFilename = context.getFilesDir().getPath() + File.separator + "savedWebPage.mht"; // You can use any path you want
webView.saveWebArchive(pathFilename);
然后您可以使用以下方法加载保存的存档文件:
webView.loadUrl("file://" + pathFilename);
请注意,我遗漏了处理何时从网站加载以及何时从存档文件加载的逻辑,这取决于您如何处理它。