2

我有一个带有javascript 方法
的 webview,该方法 调用 android Javascript Interface(JAVA) 方法,然后
Javscript Interface(JAVA) 调用context(Reader) 活动的方法来打开 UI 屏幕。

当我直接从 ReaderActivity 运行 openDiscussionsUI() 时,它会很好地打开 UI,但从 Javascript 接口运行时却不能,它似乎没有像被中断一样完全通过 openDiscussionsUI() 方法运行?希望有人可以帮助我。提前致谢。



javascript方法

marginIconClick: function (itemId) {
    activity.startDiscussionsActivity();
}



(JAVA) JavaScript 接口方法

public void startDiscussionsActivity() {
    readerActivity.openDiscussionsUI();
    Log.e("startDiscussionsActivity","startDiscussionsActivity");
}



ReaderActivity 方法

public void openDiscussionsUI() {
    Log.e("openDiscussionsUI 1","openDiscussionsUI 1");
    discussionBox.startAnimation(slidenotesup);
    Log.e("openDiscussionsUI 2","openDiscussionsUI 2");
    discussionBox.setVisibility(View.VISIBLE);
    Log.e("openDiscussionsUI 3","openDiscussionsUI 3");
    discussionDescription.requestFocus();
    Log.e("openDiscussionsUI 4","openDiscussionsUI 4");
}



这是我的日志
点击图标编号 #1

11-06 17:21:39.190  12951-12980/com.double_eye.monamiq E/openDiscussionsUI 1﹕ openDiscussionsUI 1
11-06 17:21:39.190  12951-12980/com.double_eye.monamiq E/openDiscussionsUI 2﹕ openDiscussionsUI 2


点击图标编号#2

11-06 17:22:32.154  12951-12980/com.double_eye.monamiq E/openDiscussionsUI 1﹕ openDiscussionsUI 1
11-06 17:22:32.154  12951-12980/com.double_eye.monamiq E/openDiscussionsUI 2﹕ openDiscussionsUI 2
11-06 17:22:32.154  12951-12980/com.double_eye.monamiq E/openDiscussionsUI 3﹕ openDiscussionsUI 3
11-06 17:22:32.170  12951-12951/com.double_eye.monamiq I/WEBVIEW﹕ Message - 266:Uncaught Error: Error calling method on NPObject.


点击图标编号#3

11-06 17:22:52.818  12951-12980/com.double_eye.monamiq E/openDiscussionsUI 1﹕ openDiscussionsUI 1
11-06 17:22:52.818  12951-12980/com.double_eye.monamiq E/openDiscussionsUI 2﹕ openDiscussionsUI 2
11-06 17:22:52.818  12951-12980/com.double_eye.monamiq E/openDiscussionsUI 3﹕ openDiscussionsUI 3
11-06 17:22:52.818  12951-12980/com.double_eye.monamiq E/openDiscussionsUI 4﹕ openDiscussionsUI 4
11-06 17:22:52.818  12951-12980/com.double_eye.monamiq E/startDiscussionsActivity﹕ startDiscussionsActivity


点击图标编号#4

11-06 17:23:37.850  12951-12980/com.double_eye.monamiq E/openDiscussionsUI 1﹕ openDiscussionsUI 1
11-06 17:23:37.850  12951-12980/com.double_eye.monamiq E/openDiscussionsUI 2﹕ openDiscussionsUI 2
11-06 17:23:37.850  12951-12980/com.double_eye.monamiq E/openDiscussionsUI 3﹕ openDiscussionsUI 3
11-06 17:23:37.850  12951-12980/com.double_eye.monamiq E/openDiscussionsUI 4﹕ openDiscussionsUI 4
11-06 17:23:37.850  12951-12980/com.double_eye.monamiq E/startDiscussionsActivity﹕ startDiscussionsActivity



到了第3次和第4次,它运行了,但仍然没有显示ui,很奇怪。

更新:

Javascriptinterface 的回调未在 UI 线程上运行

public void test() { // 调用 AndroidInterface.test() 后 1ms 到达这里。到达网络线程。

public void startDiscussionsActivity() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                readerActivity.openDiscussionsUI();
                Log.e("startDiscussionsActivity","startDiscussionsActivity");
            }
        });
    }
4

1 回答 1

2

确保在主 (UI) 线程上执行任何 ui 工作。JavaScript 接口回调到一个单独的线程,这意味着您需要调用 myActivity.runOnUiThread() 或类似的函数。

于 2013-11-06T20:46:37.817 回答