Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:WebView提高本地html文件的加载速度_Android_Html_Performance_Android Webview_Android Assets - Fatal编程技术网

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

Android:WebView提高本地html文件的加载速度,android,html,performance,android-webview,android-assets,Android,Html,Performance,Android Webview,Android Assets,有没有办法提高将本地.html文件加载到WebView的速度。.html文件存储在/assets文件夹中 正如您在视频中所看到的(对不起,链接断开了!),TextView(红色海滩)在传输开始前呈现,而WebView中的文本随后显示。我如何实现像文本视图一样快速加载WebView //current implementation webView.setInitialScale(1); webView.getSettings().setJavaScriptEnabled(true); webVie

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

正如您在视频中所看到的(对不起,链接断开了!),
TextView
(红色海滩)在传输开始前呈现,而
WebView
中的文本随后显示。我如何实现像文本视图一样快速加载
WebView

//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");
摘要

这是不可能的。我尝试了这里的所有评论,但都没有什么不同

我问的原因是,我们有一个iOS和Android应用程序,主要由简单的
文本视图
图像
组成。因此,我们有了创建本地
html
文件的想法,这两个应用程序都可以使用。在
iOS
中,这就像一个魔咒,但在
Android
中,我们无法摆脱加载时间,因此我总是有一个空白屏幕,在100-200毫秒后,内容就会出现

我猜如果活动可见,Androids
WebView
就会开始渲染。这在在线模式下是完全有意义的,因为您不想在用户真正聚焦之前加载几个html页面,用户在后台新点击打开这些页面。但是,在脱机模式下(存储在应用程序
资产中的本地html文件),此行为是不必要的,但您不能更改它

现在我们真的知道为什么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);

}

WebView始终比本机TextView具有更长的渲染时间。我认为这是平台的本质,但也许你们可以在加载屏幕之前尝试将html内容读入字符串(以避免文件系统操作中出现webview)。然后将字符串设置为:

webview.loadDataWithBaseURL("", earlyReadedHtmlString, "text/html", "UTF-8", "");

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

这取决于正在加载的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);

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

这就是为什么phonegap/cordova应用程序不能像本机应用程序那样快速、互动。好吧,除非本机应用程序仅由WebView组成:P

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

我认为,您想要实现的是防止用户看到不完整的屏幕。您可以使用onPageFinished在显示屏幕之前呈现webview,但加载速度不会更快,用户需要等待更长的时间,直到屏幕转换,您可能需要一个旋转的轮子

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


如果您已经发现当前的经验已经令人恼火,我会考虑把所有HTML内容/ WebVIEW都删掉。

资产访问速度很慢,因为它们包含在APK文件中,这实质上是一个荣耀的ZIP文件。 我将编写一个启动例程,只需从资产中获取文件并将其写入内部存储(如果文件很大且不包含敏感数据,则写入外部存储)


一旦您从apk的资产中提取了它们,访问它们的速度就会快得多。

您可以发布如何将资产复制到其他地方吗?