Cordova插件阻塞线程

7
我正在为一个Android Cordova/Phonegap应用程序创建一个自定义插件,本地Java端会启动一个活动,并包括由它启动的服务调用的回调。这个回调每秒钟左右被服务触发并且运行良好,但问题是我无法将其运行在另一个线程中,导致主要的Cordova线程被阻塞,应用完全无响应。
根据文档,我正在执行以下操作:
@Override
public boolean execute(String action, JSONArray args, final CallbackContext context) throws JSONException
{

/* snip */
    cordova.getThreadPool().execute(new Runnable()
    {
        public void run()
        {
            Intent myIntent = new Intent(this.cordova.getActivity(), myMonitoring.class);
            this.cordova.getActivity().startActivity(myIntent);    
            callbackContext.success();
        }
    });

    return true;
}

我意识到在这里JS回调将永远不会被调用(即callbackContext.success();),因为该活动正在阻塞,但是如果我删除startActivity调用,则应用程序会像预期的那样继续工作。不过,实际上phonegap线程应该在return true之后继续运行,不是吗?

1个回答

6

我正在调查一个问题(另一个问题)。但似乎UI主线程与Cordova线程不相等。发生的情况是,UI主线程确实被释放了,但Cordova线程没有。

顺便说一下,我也认为以下两者之间存在差异:

callbackContext.success(); 

并且

callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result));

抱歉,它仍未完成,如果我找到更多信息,我会更新。

此外,您可以先调用callbackContext.success();,然后再进行其余操作...(如果有帮助的话)。


从Cordova 3.1.0升级到3.3.0解决了主线程问题。我跳过了3.4.0,并等待3.5.0,因为我相信相关的错误(也是线程/事件)在那里(3.4.0)被发现并修复了下一个版本。 - Oren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接