有没有办法提高将本地.html
文件加载到WebView
的速度。 .html
文件存储在/assets
文件夹中。
正如您在视频中看到的那样(抱歉,链接已损坏!),TextView
(红色beackground)在转化开始之前呈现,而{{1>中的文本之后会显示。如何以与TextView一样快的速度加载WebView
?
WebView
概要
这是不可能的。我在这里尝试了所有评论,并没有什么区别。
我问的原因是,我们有一个iOS和Android应用程序,主要由简单的//current implementation
webView.setInitialScale(1);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webView.setScrollbarFadingEnabled(false);
webView.loadUrl("file:///android_asset/disclaimer.html");
和TextViews
组成。所以我们想到了创建本地 Images
文件,我们可以在这两个应用程序中使用它们。在html
中,这就像魅力一样,但在iOS
我们无法摆脱加载时间,所以我总是有一个空白的屏幕,在100-200ms之后会出现内容。
我想如果活动可见,Androids Android
会开始渲染。这在在线模式中完全有意义,因为您不想在实际关注它们之前加载几个html页面,用户在后台新打开它们。但是,在离线模式(存储在应用程序WebView
中的本地html文件)中,此行为是不必要的,但您无法更改它。
现在我们真的为什么现在为什么要手机和手机co糟透了。
仅供记录:
最后,我使用了一个空assets
容器的活动,您可以在其中以编程方式插入内容。每种风格(标题1,标题2,内容......)都有自己的布局xml文件
LinearLayout
答案 0 :(得分:6)
这取决于正在加载的Web应用程序。尝试以下一些方法:
设置更高的渲染优先级(从API 18 +弃用):
webview.getSettings().setRenderPriority(RenderPriority.HIGH);
启用/禁用硬件加速:
if (Build.VERSION.SDK_INT >= 19) {
// chromium, enable hardware acceleration
webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
} else {
// older android version, disable hardware acceleration
webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
禁用缓存:
webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
答案 1 :(得分:4)
WebView将始终具有比本机TextView更长的渲染时间。我认为这是平台的本质,但也许您可以在加载屏幕之前尝试将html内容读取到字符串(以避免从文件系统操作进行webview)。然后使用:
设置Stringwebview.loadDataWithBaseURL("", earlyReadedHtmlString, "text/html", "UTF-8", "");
从理论上讲,对于webview来说,这必须更快更公平。另一种方法是等待onPageFinished()然后显示textview。这可能是一种解决方法。
答案 2 :(得分:3)
无论您打开/关闭多少个开关以及您尝试进行多少次优化和调整,都无法像使用文本视图一样快速地呈现webview(除非您真的滥用文本视图,例如加载数千行文本)。渲染机制有利于textview,因为它更加局限于你如何指定对其正常表示的更改,因为webview可以加载外部资源,因为css修改了表示,因为javascript可以影响表示,因为它需要更多的内存和初始化来支持所有这些功能......
这就是为什么phonegap / cordova应用程序不能像本机应用程序那样快速和交互式的原因。好吧,除非本机应用程序仅由webviews构成:P
您仍然可以通过修改配置来尝试改善webview的加载/渲染时间,但最好等到内容定义完毕。所有这些设置,允许在特定情况下进行改进,例如,更改图层类型可能会帮助或恶化您的不同页面的渲染时间。正如Nirmal在他的回答中提到的,一些已知具有更大影响的是layerType,cacheMode和renderPriority
我认为很难,你想要达到的目的是阻止你的用户看到一个不完整的屏幕。你可以在使用onPageFinished显示你的屏幕之前渲染一个webview,但它不会加载得更快,用户必须等待更长时间,直到屏幕转换,你可能需要一个旋转轮。
根据我的经验,您实现转换的方式是更好的用户体验,我会等到您确定html内容之后再尝试优化加载时间。
如果你已经发现目前的经历已经令人烦恼,我会考虑把所有的html内容/网页带出去。
答案 3 :(得分:2)
资产访问速度很慢,因为它们包含在apk文件中,该文件本质上是一个美化的zip文件。
我会编写一个启动例程,只需从资产中获取文件并将其写入内部存储(如果它们非常大并且不包含敏感数据,则将其写入外部存储。
从apk的资产中提取后,它们的访问速度要快得多。