我的问题
我们有定制的网页。每页约 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? (如滑翔)
最佳答案
解决您的问题的两个选项:
选项 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_NETWORK
和 LOAD_CACHE_ONLY
。他们都非常危险。因为如果缓存模式设置为 LOAD_CACHE_ELSE_NETWORK ,这意味着即使资源过期,您的 Web View 仍会加载缓存。如果缓存模式设置为LOAD_CACHE_ONLY
,即使您已连接网络,同样的问题仍然存在,资源不会被加载,而是会使用缓存。
关于android - 如何避免重新加载 Webview - 如果已经加载过一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57907095/