gpt4 book ai didi

java - 自 Lollipop 以来,膨胀 WebView 很慢

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:40:56 25 4
gpt4 key购买 nike

其实我很惊讶我在Stackoverflow中没有发现类似的问题,但我真的想不通。

首先请注意,这与在 WebView 内浏览网页的性能无关。它只是关于膨胀一个空的 WebView,而不加载任何 URL。

为了消除所有其他因素,我创建了一个全新的项目,其中仅包含重现问题所需的内容。

在这个几乎是空的项目中,我有一个只包含一个 WebView 的布局:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.testing.WebViewOnlyActivity">

<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

</FrameLayout>

我有一个 MainActivity,它只包含一个 Button,它启动了这个 WebViewOnlyActivity:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, WebViewOnlyActivity.class);
startActivity(intent);
}
});
}
}

很简单吧?

现在,当我构建项目时,单击按钮,WebViewOnlyActivity 需要超过 1 秒才能弹出。但是如果我按下后退按钮,然后再次按下按钮,WebViewOnlyActivity 会立即出现。 显然 Android 缓存了一些 WebView

这是我的测试设备:
1. Android 7.1.1:慢
2. Android 7.0.0: 慢
3. Android 5.0.2 慢
4. Android 4.4.1 快

所以在我看来,这只发生在 Lollipop 之后。

但是,这样1.x秒的延迟,我还是无法接受。有谁知道如何解决它? (好吧,我认为这很难,因为我对这个 WebView 没有做任何事情......也许我应该使用一些第 3 方 WebView?)

附言我还使用 traceview 查看 7.1.1 设备和 4.4.1 设备之间的区别。很明显,WebView 的 init() 方法占用了大量时间。

7.1.1: 7.1.1 Trace View更深入: 7.1.1 Deeper

4.4.1: 4.4.1 Trace View更深入: 4.4.1 Deeper

大不同!


虽然真的是空的,但是应Axel的要求,我把WebViewOnlyActivity的代码也贴出来:

public class WebViewOnlyActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_view_only);

}
}

最佳答案

编辑 2017-12-21

我什至创建了一个库来轻松解决这个问题。
您可以下载here .
觉得有用就给个star吧:P


感谢@XavierRubioJansana 的提示,我尝试了 ViewStub延缓通货膨胀。

但是,即使我将通货膨胀延迟到 onResume() ,它仍然会减慢 Activity 的创建。

但是如果我使用 HandlerpostDelay通货膨胀, Activity 立即产生!

    Handler webViewInflateHandler = new Handler();
webViewInflateHandler.postDelayed(new Runnable() {
@Override
public void run() {
if (!webViewInflated) {
webView = (WebView) webViewStub.inflate();
webViewInflated = true;
}
}
}, 50);

然后,你需要延迟各种设置和加载WebView直到充气为止。我会建议在这里使用 RxJava 来观察 BehaviorSubject<Boolean> .

关于java - 自 Lollipop 以来,膨胀 WebView 很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46928113/

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