为什么在 Android 9.0 中 Webview 中的进度条显示有延迟?

Why is the progress bar in a webview displayed with a delay in Android 9.0?

我是 android 的新手,我正在开发一个包含片段的应用程序。其中一个片段包含 WebView。我正在使用 ProgressBar ,因为它在许多 webview 教程中都提到过,以便在页面加载时有一个加载动画。 问题是,当我 运行 应用程序并在 WebView 中加载页面时(无论是外部设备还是模拟器),进度条会出现一个小延迟(大约 2 秒),而不是紧接着例如按 link。仅在新页面开始加载前不久,它会短暂出现并在加载页面时根据需要再次消失。

我已经测试了几个 android 版本,除了 Android 9.0

之外,它在所有版本上都运行良好

这是我的 WebViewClient class 用于我的 webView:

private class MyWebviewClient extends WebViewClient {

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            webProgress.setVisibility(View.VISIBLE);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            webProgress.setVisibility(View.GONE);
        }

    }

这是我的 xml 布局文件:

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

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

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyle"
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />


</RelativeLayout>

我只是不知道我做错了什么。

我自己找到了答案。我不得不覆盖 shouldOverrideUrlLoading() 而不是 onPageStarted() 以便 ProgressBar 在单击 link 之后立即显示,而不是稍后显示。

private class MyWebviewClient extends WebViewClient {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            webProgress.setVisibility(View.VISIBLE);
            return super.shouldOverrideUrlLoading(view, url);
    }

        @Override
        public void onPageFinished(WebView view, String url) {
            webProgress.setVisibility(View.GONE);
        }

}

我发现旧版本 Webview 和新版本 Webview 之间的行为发生了变化。

旧版本 Webview 在第一步时调用 onPageStart,但较新版本(我在 74 上测试)在 "Waiting" 步骤时调用 onPageStart。

因此将代码更改为 OnProgressChanged 以解决此问题。