在Webview上加载脱机更新页面

时间:2015-08-02 23:38:19

标签: android webview

我正在运行我的应用程序,该应用程序具有不同活动的webview,他们正在加载在线页面,问题是每次活动打开时,webview需要几秒钟才能加载页面,并且页面无法离线使用。 / p>

我一直在寻找一个解决方案,其中webview将始终访问该网站的离线副本,该应用程序将每24小时下载并替换本地网站。

我觉得这很简单 感谢

1 个答案:

答案 0 :(得分:0)

我看到了一些解决这个问题的潜在解决方案。

更改WebView缓存模式

第一个也是最简单的方法是更改​​WebView的缓存模式,以便强制从缓存加载。这样它将尝试从缓存加载,如果没有缓存任何资源,那么它将进行网络加载。这可以通过使用:

简单地完成
WebView webView; // initialized somewhere
webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

理论上,如果WebView已经加载一次并且不需要更新,则可以使用LOAD_CACHE_ONLY,否则可以使用LOAD_DEFAULT。使用LOAD_CACHE_ELSE_NETWORK肯定会加快加载时间,但它仍然可能会从网络中加载一些东西。

然而,在实践中,我已经看到缓存设置不能像我希望的那样一致地工作。

使用WebView.saveWebArchive()

另一个更强大的解决方案是使用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);

请注意,我遗漏了处理何时从网站加载以及何时从存档文件加载的逻辑,这取决于您如何处理它。