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

lon*_*ngi 11 html performance android android-assets android-webview

有没有办法提高加载本地.html文件的速度WebView.该.html文件存储在/assets文件夹中.

正如您在视频中看到的(抱歉,链接已损坏!),TextView(红色beackground)在转换开始之前呈现,而WebView之后显示的文本.如何实现加载WebView与TextView一样快?

//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");
Run Code Online (Sandbox Code Playgroud)

摘要

这是不可能的.我在这里尝试了所有评论并没有什么区别.

我问的原因是,我们有iOS和Android的应用程序,主要包括简单TextViewsImages.所以我们有了创建本地 html文件的想法,我们可以在两个应用程序中使用它们.在iOS这个作品就像一个魅力,但在Android我们无法摆脱加载时间,所以我总是有一个空白的屏幕,并在100-200ms之后出现内容.

我想WebView如果活动可见,Androids会开始渲染.这在在线模式下完全有意义,因为您不想加载几个html页面,用户在实际关注它们之前在后台新打开它们.但是,在脱机模式(存储在应用程序中的本地html文件assets)中,此行为是不必要的,但您无法更改它.

现在我们现在真的为什么phonegap&co糟透了.

仅供记录:最后,我使用了一个带有空LinearLayout容器的活动,您可以在其中以编程方式插入内容.每种样式(标题1,标题2,内容......)都有自己的布局xml文件

public void insertHeadline(int id){

    String text = getString(id);
    TextView headline = (TextView) inflater.inflate(R.layout.layout_text_headline, null, false);
    headline.setText(text);

    //add this TextView to the empty container
    myLinearLayoutContainerView.addView(headline);

}
Run Code Online (Sandbox Code Playgroud)

Nir*_*ala 6

这取决于正在加载的Web应用程序.尝试以下一些方法:

设置更高的渲染优先级(不推荐使用API​​ 18+):

webview.getSettings().setRenderPriority(RenderPriority.HIGH);
Run Code Online (Sandbox Code Playgroud)

启用/禁用硬件加速:

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);
}
Run Code Online (Sandbox Code Playgroud)

禁用缓存:

webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
Run Code Online (Sandbox Code Playgroud)


aso*_*can 5

WebView 的渲染时间总是比原生 TextView 更长。我认为这是平台的性质,但也许您可以尝试在加载屏幕之前将 html 内容读取为字符串(以避免文件系统操作中的 webview)。然后设置字符串:

webview.loadDataWithBaseURL("", earlyReadedHtmlString, "text/html", "UTF-8", "");
Run Code Online (Sandbox Code Playgroud)

从理论上讲,这对于 webview 来说必须更快更公平。另一种方法是等待 onPageFinished() 然后显示 textview。它可以是一种解决方法。


use*_*077 3

无论您打开/关闭多少个开关以及尝试多少次优化和调整,WebView 的渲染速度都无法像 TextView 一样快(除非您确实滥用 TextView,例如加载数千行文本)。渲染机制有利于textview,因为它在如何指定对其正常呈现的更改方面受到更多限制,因为webview可以加载外部资源,因为css修改呈现,因为javascript可以影响呈现,因为它需要更多内存和初始化来支持所有这些功能,...

这就是为什么phonegap/cordova应用程序永远无法像本机应用程序那样灵活和交互的原因。好吧,除非本机应用程序仅由 webviews 组成:P

您仍然可以尝试通过修改 webview 的配置来改善 webview 的加载/渲染时间,但最好等到您的内容被定义。所有这些设置都允许在特定情况下进行改进,例如,更改图层类型可能会帮助或缩短不同页面的渲染时间。正如 Nirmal 在他的回答中提到的,已知影响较大的一些是 LayerType、cacheMode 和 renderPriority

我认为很难,您想要实现的目标是防止用户看到不完整的屏幕。您可以使用 onPageFinished 在显示屏幕之前渲染 webview,但它不会加载得更快,用户将不得不等待更长的时间,直到屏幕转换,并且您可能需要一个旋转轮。

根据我的经验,实现转换的方式可以带来更好的用户体验,我会等到定义 html 内容后再尝试优化加载时间。

如果您已经发现当前的体验已经令人恼火,我会考虑删除所有 html 内容/网络视图。