有没有办法让运行android 4.0的webview达到可接受的水平?

有没有办法让运行android 4.0的webview达到可接受的水平?,android,performance,dom,webview,Android,Performance,Dom,Webview,在emulator和我的galaxy nexus设备上,这个简单的演示应用程序需要整整1000毫秒或更长的时间来选择或取消选择复选框。我想用javascript编写我的大部分应用程序,这样我就可以在ios/android/web上重用代码,但这是一个破坏者 这是我的密码: (活动) (xml布局) (Web视图中加载的html) 我知道这已经有一年多的历史了,但您可以尝试实现fastclick.js: 我已经在很多项目中成功地使用了它。正如本页所述: …移动浏览器将从 点击该按钮可触发单击事

在emulator和我的galaxy nexus设备上,这个简单的演示应用程序需要整整1000毫秒或更长的时间来选择或取消选择复选框。我想用javascript编写我的大部分应用程序,这样我就可以在ios/android/web上重用代码,但这是一个破坏者

这是我的密码:

(活动)

(xml布局)


(Web视图中加载的html)


我知道这已经有一年多的历史了,但您可以尝试实现fastclick.js:

我已经在很多项目中成功地使用了它。正如本页所述:

…移动浏览器将从 点击该按钮可触发单击事件。原因是 浏览器正在等待查看您是否正在实际执行 双击


webview中的交互也是如此(据我所知)

我注意到,在使用标准浏览器或android chrome的普通web浏览器中,我也会获得同样糟糕的性能。进入gmail.com,在注销时选择或取消选择复选框以切换“记住我”仍然需要整整一秒钟!这太疯狂了。。。
package com.mycompanyname;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.webkit.ConsoleMessage;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebSettings.RenderPriority;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import com.mycompanyname.R;

public class JavascriptListViewTestActivity extends Activity {
    private JavascriptListViewTestActivity parent = this;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);            

        WebChromeClient chrome = new WebChromeClient() {
            @Override
            public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
                parent.showDialog(consoleMessage.message() + "\n" + consoleMessage.lineNumber());
                return true;
            }
        };

        WebViewClient client = new WebViewClient() {

        };

        WebView webView = (WebView)findViewById(R.id.webView1);
        webView.setWebChromeClient(chrome);
        webView.setWebViewClient(client);

        webView.getSettings().setJavaScriptEnabled(false);
        webView.getSettings().setAllowFileAccess(false);
        webView.getSettings().setAppCacheEnabled(false);
        webView.getSettings().setBuiltInZoomControls(false);
        webView.getSettings().setDatabaseEnabled(false);
        webView.getSettings().setDomStorageEnabled(false);
        webView.getSettings().setGeolocationEnabled(false);
        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(false);
        webView.getSettings().setLightTouchEnabled(false);
        webView.getSettings().setLoadWithOverviewMode(false);
        webView.getSettings().setNavDump(false);
        webView.getSettings().setNeedInitialFocus(false);
        webView.getSettings().setPluginsEnabled(false);
        webView.getSettings().setRenderPriority(RenderPriority.HIGH);
        webView.getSettings().setSaveFormData(false);
        webView.getSettings().setSavePassword(false);
        webView.getSettings().setSupportMultipleWindows(false);
        webView.getSettings().setSupportZoom(false);
        webView.getSettings().setUseDoubleTree(false);
        webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

        String html = readText(R.raw.listview);

        webView.loadData(html, "text/html", "UTF-8");

    }

    private void showDialog(String message)
    {
        AlertDialog alert = new AlertDialog.Builder(parent).create();
        alert.setMessage(message);
        alert.show();
    }

    private String readText(int resourceId) 
    {
        InputStream is = this.getResources().openRawResource(resourceId);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String readLine = null;
        StringBuffer outputBuffer = new StringBuffer();

        try 
        {
            while ((readLine = br.readLine()) != null) 
            {
                outputBuffer.append(readLine);
            }
            return outputBuffer.toString();
        } 
        catch (Exception e) {
            e.printStackTrace();
            return "";
        }
        finally 
        {
            // TODO: might throw - use IOUtils.close()
            try 
            {
                is.close();
                br.close();
            } 
            catch (IOException ex) 
            {
                showDialog(ex.toString());
            }
        }
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

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

</LinearLayout>
<html>
<body>

<input type="checkbox" />

</body>
</html>