Android:WebView提高了本地html文件的加载速度

时间:2016-04-12 14:50:41

标签: android html performance android-webview android-assets

有没有办法提高将本地.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

4 个答案:

答案 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)。然后使用:

设置String
webview.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的资产中提取后,它们的访问速度要快得多。

相关问题