启用javascript时,Android Webview会降低Nexus设备的速度

Android Webview slows down Nexus devices when javascript is enabled

本文关键字:Nexus 速度 javascript Android Webview 启用      更新时间:2023-09-26

我在Nexus设备上遇到了这个奇怪的问题,比如Nexus 4、Galaxy Nexus和Nexus 7。我有一个类似浏览器的应用程序,有多个选项卡,每个选项卡都有一个Webview。

如果我在多个选项卡(2个或更多)中打开像Google.com这样的网站,网络视图不会点击。此外,网站加载速度也相当慢。以下是我的网络视图设置

    private void doWebSettings(WebView webview) {
        webview.setScrollbarFadingEnabled(true);
        webview.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
        WebSettings webSettings = webview.getSettings();
        webSettings.setJavaScriptEnabled(true);
        // enable smooth transition for better performance during panning or
        // zooming
        if (currentSdk >= OS_3_0) {
            webSettings.setEnableSmoothTransition(true);
        }
        // For Zooming out completely
        webSettings.setLoadWithOverviewMode(true);
        webSettings.setUseWideViewPort(true);
        webSettings.setSupportZoom(true);
        webSettings.setBuiltInZoomControls(true);
        webSettings.setDomStorageEnabled(true);
        webSettings.setAllowFileAccess(true);
        try {
            webSettings.setAllowContentAccess(false);
        } catch (NoSuchMethodError e) {
            e.printStackTrace();
        }
        String databasePath = this.getApplicationContext()
                .getDir("database", Context.MODE_PRIVATE).getPath();
        webSettings.setDatabasePath(databasePath);
        webSettings.setGeolocationDatabasePath(this.getApplicationContext()
                .getDir("geolocation", 0).getPath());

        webSettings.setRenderPriority(RenderPriority.HIGH);
        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
        webSettings.setDatabaseEnabled(true);
        // Dont focus on any webview item by default
        webSettings.setNeedInitialFocus(false);
        if (!isTablet) {
            webSettings
                    .setUserAgentString("Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17");
        }
}

如果我将Javascript enabled设置为"False",那么所有的Web视图都能顺利工作。这个问题在所有的nexus设备上都很明显,有时网络视图几分钟内都不会点击。此行为导致应用程序不可用。我推测某些Javascript正在消耗Webview的UI线程,这就是它陷入困境的原因。我在Eclipse中收到了一个关于setJavascriptEnabled的警告(true);由于"使用setJavaScriptEnabled可能会将XSS漏洞引入您的应用程序,请仔细查看。"我在互联网上搜索了此警告,但无法找到任何相关答案。此外,我还查看了一些与人们在Jellybean上面临Webview性能问题有关的帖子。我在这里错过了什么?

找到罪魁祸首。

webview.freeMemory() 

我调用这个函数是为了在每次更改选项卡时释放内存。对此代码进行注释解决了问题。我不确定这背后的原因,但Webview会进入某种处理状态很长一段时间,并且不会点击UI。