2013-11-14 27 views
7

私はAndroidのcordova/phonegapアプリケーションのカスタムプラグインを作成しています。ネイティブのJavaサイドファイアは、起動するサービスによって呼び出されるコールバックを含むアクティビティを生成します。アイデアは、コールバックが1秒おきにサービスからヒットしてうまくいくことですが、問題は別のスレッドで実行されているように見えないため、メインコードバススレッドがブロックされ、アプリケーションが完全に応答しないということです。私は活動が遮断するが、実際のP​​honeGapのスレッドキープいけないされているため、JSコールバックが(すなわちcallbackContext.success();)と呼ばれることはありません飽きないだろう、ここで実現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; 
} 

:私はこれをやっているドキュメントに基づいて

return trueの後に実行していますか? startActivityコールを削除すると、アプリは期待どおりに機能し続けます。

答えて

6

問題を調査中です(別の方法)。しかし、それはUIのメインスレッドがCordovaスレッドと等しくないようです。そして、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.4.0をスキップし、3.5.0を待っています。 – Oren