И на эмуляторе, и на моем устройстве galaxy nexus это простое демонстрационное приложение занимает целых 1000 миллисекунд или дольше, чтобы установить или снять флажок. Я хотел написать большую часть своего приложения на javascript, чтобы можно было повторно использовать код в ios / android / web, но это нарушает условия сделки.
Вот мой код:
(Активность)
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-макет)
<?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, загруженный в веб-просмотр)
<html>
<body>
<input type="checkbox" />
</body>
</html>