2013-11-14 123 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