2

WebView + addJavascriptInterfaceを使用して、WebViewコントロールに表示されるhtmlページからアプリを制御します。一部のAPIバージョンでは正常に動作しますが、たとえばエミュレータのAPI 10では正しく動作せず、 WebViewCoreThreadでクラッシュが発生します。一部の実際のデバイスのユーザーからも報告されています。

私のhtmlは次のようになります:

<html>
<head>
<script type="text/javascript">
function hideId(id){
   callback.hide(id);
}
</script>
</head>
<body>
  <input type="button" value="Hide" onclick="hideId('1');">
</body>
</html>

これは、次のようなJavaコードをコールバックする[非表示]ボタンを示しています。

private class JS{
   public void hide(String id){
      ... some code
   }
}

WebView wv = ...
wv.addJavascriptInterface(new JS(), "callback");
wv.loadURL(...);

一部のデバイスでは正常に動作しますが、前述のAPI10エミュレーターでは、htmlのボタンを押すと、logcatにエラーが表示され、WebView全体が病気になり、タッチに反応するコントロールがなくなり、JS.hide関数が呼び出されません。

W/dalvikvm(1790): JNI WARNING: jarray 0xb6e1bfd0 points to non-array object (Ljava/lang/String;)
I/dalvikvm(1790): "WebViewCoreThread" prio=5 tid=10 NATIVE
I/dalvikvm(1790):   | group="main" sCount=0 dsCount=0 obj=0xb6e4f8a0 self=0x8a9c568
I/dalvikvm(1790):   | sysTid=1800 nice=0 sched=0/0 cgrp=[fopen-error:2] handle=145332280
I/dalvikvm(1790):   at android.webkit.WebViewCore.nativeTouchUp(Native Method)
I/dalvikvm(1790):   at android.webkit.WebViewCore.nativeTouchUp(Native Method)
I/dalvikvm(1790):   at android.webkit.WebViewCore.access$3300(WebViewCore.java:53)
I/dalvikvm(1790):   at android.webkit.WebViewCore$EventHub$1.handleMessage(WebViewCore.java:1158)
I/dalvikvm(1790):   at android.os.Handler.dispatchMessage(Handler.java:99)
I/dalvikvm(1790):   at android.os.Looper.loop(Looper.java:130)
I/dalvikvm(1790):   at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:629)
I/dalvikvm(1790):   at java.lang.Thread.run(Thread.java:1019)
E/dalvikvm(1790): VM aborting

これの何が問題なのか考えてみてください。

4

1 に答える 1

2

私自身もこの問題に遭遇しましたが、これはandroid2.3の既知の問題であることがわかりました。 http://code.google.com/p/android/issues/detail?id=12987

于 2012-06-11T21:29:13.803 に答える