Android - WebViewClient 加载页面极其缓慢

标签 android browser native webviewclient

作为一名开发人员,在构建在 3G 连接的 Android webviewclient 上运行的应用程序(带有网页)时,我有过非常糟糕的经历。我的一些用户说有些页面需要 10 分钟才能加载。 (我不知道他们是否因为沮丧而夸大了。)就个人而言,我使用运行 Android 2.2 的 HTC Desire 并用我自己的手机测试了我的应用程序。事实上,即使是使用本地存储的网页来发出 AJAX 请求的应用程序,在 3G 上也非常慢。大多数时候,它只会超时并显示一个空白页面。当它连接到 WIFI 时,它工作正常并且速度非常快。

我听很多人说 Android 2.2 上的原生浏览器非常快。然而,对我来说,我必须说 native 浏览器应用程序在 3G 上也非常慢。有时,谷歌手机主页甚至没有完成加载。我在新加坡,所以 3G 覆盖在大多数地方应该没问题。

是否是设备硬件导致了问题?

最佳答案

我不知道与 WebView 加载时间特别相关的设备特定性能问题。但是,您可能希望同时添加请求超时和网络连接更改监听器。有关其他信息,您可以为请求计时并报告有关缓慢请求的设备和连接信息。

handler = new Handler();
WebView webView = findViewById(R.id.webview);
webView.setWebViewClient(new WebViewClient() {
    final long WEBVIEW_REQUEST_TIMEOUT = ...;
    final long WEBVIEW_SLOW_REQUEST_THRESHOLD = ...;
    Runnable onRequestTimeout = null;
    @Override
    public void onPageStarted(WebView view, final String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon); // current impl is no op but be fwd compatible
        saveRequestStartTime();
        onRequestTimeout = new Runnable() {
            @Override
            public void run() {
                handleRequestComplete(url, WebViewClient.ERROR_TIMEOUT);
            }
        };
        handler.postDelayed(onRequestTimeout, WEBVIEW_REQUEST_TIMEOUT);
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url); // current impl is no op but be fwd compatible
        handleRequestComplete(url, 0);   // Return 0 onSuccess. All WebViewClient defined errors < 0. 
    }

    @Override
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
        super.onReceivedError(view, errorCode, description, failingUrl); // current impl is no op but be fwd compatible
        handleRequestComplete(failingUrl, errorCode);
    }

    private void handleRequestComplete(String url, int errorCode) {
        if (onRequestTimeout != null) {
            handler.removeCallbacks(onRequestTimeout);
        }
        onRequestTimeout = null;
        final long elapsedTime = getRequestElapsedTime();
        if (elapsedTime > WEBVIEW_SLOW_REQUEST_THRESHOLD) {
            reportSlowRequest(elapsedTime, url, errorCode);
        }
        clearRequestTime();
    }

    private void saveRequestStartTime() {...}
    private long getRequestElapsedTime() {...}
    private void clearRequestTime() {...}
    private void reportSlowRequest(long elapsedTime, String url, int errorCode) {...}
});

关于Android - WebViewClient 加载页面极其缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4611351/

相关文章:

authentication - Telegram 登录小部件因禁用跨站点 cookie 而损坏

android - JNI 将字符串从 C++ 导出到 Java

reactjs - REACT NATIVE - 关闭导入模式时更改屏幕状态

java - 将数据从数据库检索到我的应用程序(不工作)

android - edittext.getdrawing 缓存不工作.Android

android - Firebase 集成后 Crashlytics 混淆停止工作

java - 如何从 firebase 实时数据库获取下一个子项的数据并将其显示在 ListView 中

css - 如何管理现代/古代浏览器的 Assets

hadoop - 无法使用 Hadoop 打开 Ambari 登录页面 (http ://127. 0.0.1:8080/)

java - 在 Android Studio 上调试 native 和 java-app 时出错