2012-02-15 13 views
0

Android SDKにSwingUtilities.invokeAndWaitメソッドがありますか?android invokeandwait equivalent

簡単にエミュレートできますか?

私は、UIスレッドにセカンダリスレッドから治療を投稿し、UIがその実行を完了し、セカンダリスレッド

答えて

0

初に値を返し、これはおそらく良いアイデアではないことを待つ必要があります。ユーザは、HOMEボタン、BACKボタン、電話受話を受け入れることができます。その場合、UIは意味のある方法で「実行を終了しない」ことがあります。バックグラウンドスレッドを終了してその結果をメインアプリケーションスレッドに送信した後、メインアプリケーションスレッドは別のスレッドをforkすることができます。

さらに、java.util.concurrentを見て、LinkedBlockingQueueのようなニーズに合ったものを見つけてください。

+0

が、これは「threatmentの実行を終了する」を意味します。ローカルスレッド変数を使用する必要があるため、別のスレッドを起動できません。 – user954469

0

私はそれが少し遅れたことは知っていますが、場合によっては助けになるかもしれません。 AndroidUtilitiesクラスを作成します:ワーカースレッドで

public class AndroidUtilities { 
    public static void runOnUiThreadAndWait(Activity act, final Runnable runnable) { 
     synchronized (runnable) { 
      act.runOnUiThread(new Runnable() { 
       public void run() { 
        runnable.run(); 
        synchronized (runnable) { 
         runnable.notify(); 
        } 
       } 
      }); 
      try { 
       runnable.wait(); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

使用法:

AndroidUtilities.runOnUiThreadAndWait(act, new Runnable() {...}); 

同期を明示的に行う必要があります:ワーカースレッドがにUIコードを提出する必要がありながら、EDTは、UIコードとnotifyを実行する必要があります私は「その実行を終了」と言うときEDTとwait

乾杯