【问题标题】:Cordova plugin blocking threadCordova 插件阻塞线程
【发布时间】:2017-02-08 14:12:05
【问题描述】:

我正在为 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();),因为活动被阻塞,但实际的 phonegap 线程不应该在return true 之后继续运行吗?如果我删除 startActivity 调用,那么应用程序将按预期继续工作。

【问题讨论】:

    标签: android multithreading cordova


    【解决方案1】:

    我正在调查一个问题(另一个)。但似乎 UI Main 线程不等于 Cordova 线程。发生的情况是 UI Main 线程确实被释放了,但 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)发现了一个相关的错误(也是线程/事件)并修复了下一个版本。
    猜你喜欢
    • 2015-12-04
    • 2016-01-27
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 2015-12-29
    • 2010-10-07
    • 2012-01-25
    • 1970-01-01
    相关资源
    最近更新 更多