2013-11-14 79 views
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();),因为活性阻断,但应该不是实际的PhoneGap线程保持在return true之后运行?如果我删除了startActivity电话,则应用程序按预期继续工作。

回答

6

我正在调查一个问题(另一个)。但似乎UI主线程不等于科尔多瓦线程。然后发生的事情是UI主线程确实被释放,但Cordova线程不是。

顺便说一句,我也觉得有之间的差异:

callbackContext.success(); 

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

现在还没有出炉,对不起。如果我能找到更多,我会更新。

此外,你可以先拨callbackContext.success();,然后剩下的..(如果它有助于任何事情)。

+0

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