gpt4 book ai didi

Android webview加载数据性能很慢

转载 作者:IT老高 更新时间:2023-10-28 21:46:05 26 4
gpt4 key购买 nike

您好,我正在开发一个应用程序,因为我正在使用 Android WebView。每当我启动 webview Activity 时,从 test.txt 文件中加载字符串 html 格式的数据。test.txt 文件包含近 2.5 MB 的数据,加载 test.txt 文件后,如果滑动屏幕结束读取所有数据并按返回。然后随后启动 webview Activity 需要更多时间来呈现数据。在 webview 的首次启动中,它花费的时间最少。在启动此 Activity 之间我没有收到任何错误/异常/崩溃。

我使用的是 Android API 级别 18 及以上

注意:我对这个问题做了很多研究。我尝试了 Android webview slow 的解决方案和 Android WebView performance没用。

我不能制作 android:hardwareAccelerated="true" <-- 为什么因为它有很多副作用(我仍然使用这个,但我在这个问题上没有发现任何变化)。

我无法使用webview.getSettings().setRenderPriority(RenderPriority.HIGH);

setRenderPriority() --> API 级别 18 已弃用此方法。 不建议调整线程优先级,后续版本将不再支持。

我的 DataLoader.java 类

public class DataLoader extends Activity {

private WebView webView = null;
// Progress Dialog
private ProgressDialog progressDialog;

String dataContent = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.web_view);
webView = (WebView)findViewById(R.id.text);

// Loading webview in Background Thread
new LoadWebView().execute();
}

class LoadWebView extends AsyncTask<String, String, String> {

@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(DataLoader.this);
progressDialog.setTitle("Loading...");
progressDialog.setMessage("Please wait.");
progressDialog.setCancelable(false);
progressDialog.setIndeterminate(true);
progressDialog.show();
}

protected String doInBackground(String... args) {
// AssetFileReader read the txt file and return data in the form of string
dataContent = AssetFileReader.read(getApplicationContext(), "test.txt");

return null;
}

protected void onPostExecute(String str) {
// dismiss the dialog
progressDialog.dismiss();

if (dataContent != null) {
// updating UI from Background Thread
runOnUiThread(new Runnable() {
public void run() {

WebSettings s = webView.getSettings();
s.setUseWideViewPort(true);
s.setSupportZoom(true);
s.setBuiltInZoomControls(true);
s.setDisplayZoomControls(false);
s.setJavaScriptEnabled(true);
webView.loadData(dataContent, "text/html", "utf-8");
}
});
}
}
}

@Override
public void onDestroy() {
super.onDestroy();
webView.clearCache(true);
webView.clearHistory();
}
}

我的 web_view.xml 文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<WebView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/text">
</WebView>

</LinearLayout>

如果您对此问题有任何解决方法,请告诉我。

最佳答案

我认为以下方法效果最好:

if (Build.VERSION.SDK_INT >= 19) {
webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
}
else {
webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}

Android 19 具有用于 WebView 的 Chromium 引擎。我想它在硬件加速方面效果更好。

更多信息Android 4.4 KitKat, the browser and the Chrome WebView

Hardware Acceleration也可以做到这一点。您可以在应用程序的不同级别中使用它。

应用级别

<application android:hardwareAccelerated="true" ...>

Activity 级别

<application android:hardwareAccelerated="true">
<activity ... />
<activity android:hardwareAccelerated="false" />
</application>

窗位

getWindow().setFlags(
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

查看级别

myView.setLayerType(View.LAYER_TYPE_HARDWARE, null);

但是正如您在问题中已经提到的那样,您能详细说明一下副作用吗?

关于Android webview加载数据性能很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32304237/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com