2

我正在开发从服务器读取 json 数据的 phonegap 应用程序,但它会停止当前进程的执行,直到 javascript 被执行。

我想像线程一样执行进程。

我怎样才能实现它?

4

1 回答 1

3

WebView 中的 JavaScript 不在 UI 线程上运行。它在 WebCore 线程上运行。execute 方法也在 WebCore 线程上运行。

如果您需要与 UI 交互,则应使用以下内容:

@Override
public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException {
    if ("beep".equals(action)) {
        final long duration = args.getLong(0);
        cordova.getActivity().runOnUiThread(new Runnable() {
            public void run() {
                ...
                callbackContext.success(); // Thread-safe.
            }
        });
        return true;
    }
    return false;
}

如果不需要在 UI 线程上运行,但又不想阻塞 WebCore 线程:

@Override
public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException {
    if ("beep".equals(action)) {
        final long duration = args.getLong(0);
        cordova.getThreadPool().execute(new Runnable() {
            public void run() {
                ...
                callbackContext.success(); // Thread-safe.
            }
        });
        return true;
    }
    return false;
}
于 2013-07-08T09:33:38.730 回答