如何避免重新加载Webview-如果已经加载一次

时间:2019-09-12 12:48:02

标签: android webview

我的问题

我们已经定制了网页。每页约10 MB 3D文件。 我想避免每次重新加载10 MB Webview页面。

我尝试过的

WebView webView = new WebView( context );
webView.getSettings().setAppCacheMaxSize( 50 * 1024 * 1024 ); // 50MB
webView.getSettings().setAppCachePath( getApplicationContext().getCacheDir().getAbsolutePath() );
webView.getSettings().setAllowFileAccess( true );
webView.getSettings().setAppCacheEnabled( true );
webView.getSettings().setJavaScriptEnabled( true );
webView.getSettings().setCacheMode( WebSettings.LOAD_DEFAULT ); 

问题

似乎只是提高了10%的速度。 同一页面再次需要更多时间。

问题

是否有其他方法可以避免再次重新加载10 MB Webview? (像Glide)

1 个答案:

答案 0 :(得分:2)

两个解决问题的方法:

选项1 。在网络服务器中编辑.htaccess文件以包含以下几行。这样,客户将了解该网页是可访问的。这样,您可以保持缓存模式不变。您应该更改max-age(以秒为单位)和Expires以满足您的要求。

  

.htaccess

<!-- Rest of code-->
<IfModule mod_headers.c>
    Header set Cache-Control "public, max-age=31536000"
    Header set Expires "Wed, 21 Oct 2020 07:28:00 GMT"
</IfModule>

如果.htaccess中包含上述行,则可以使用。

webView.getSettings().setCacheMode( WebSettings.LOAD_DEFAULT ); 

作为参考,您可以根据此问题检查此存储库(https://github.com/mecoFarid/WebViewCache)。自从我在服务器端修改了.htaccess以来,此仓库中的示例就可以工作了。


选项2。(不推荐)。正如@Azer指出的LOAD_CACHE_ELSE_NETWORKLOAD_CACHE_ONLY。他们俩都非常危险。因为如果将缓存模式设置为LOAD_CACHE_ELSE_NETWORK,则意味着即使资源已过期,您的Web视图仍将加载缓存。而且,如果将缓存模式设置为LOAD_CACHE_ONLY,即使您已连接网络,同样的问题将仍然存在,资源将不会加载,而是会使用缓存。