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

标签 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? (如滑翔)

最佳答案

解决您的问题的两个选项:

选项 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 View 仍会加载缓存。如果缓存模式设置为LOAD_CACHE_ONLY,即使您已连接网络,同样的问题仍然存在,资源不会被加载,而是会使用缓存。

关于android - 如何避免重新加载 Webview - 如果已经加载过一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57907095/

相关文章:

android - 如何在内容缩小时更新自定义 WebView 高度请求

java - 如何确定当前本地化并向 Android 中的 GoogleMapsApi 添加标记

Android:禁用 ListView 选择

Android onActivityResult 始终为 0

java - 防止后台Activity被杀死?

android - 更新 Chrome 稳定版本 63 时 WebView Android 历史记录中的问题

android - 带有圆角、描边和选择器图标的自定义微调器

java - 在Android应用程序中的webview中的YouTube

javascript - Android 4.2 股票浏览器。 Canvas clearRect() 有时不起作用

android - 在 Android 4.4 Web View 中将 Web View 转换为图像不起作用