2011-03-07 9 views
1

Android docはrunOnUiThreadについて: "現在のスレッドがUIスレッドでない場合、そのアクションはUIスレッドのイベントキューにポストされます。"runOnUiThreadに関する質問

私の質問は、異なるアクティビティが同じイベントキューを共有するか、各アクティビティが独自のイベントキューを持つかどうかです。

と仮定アクティビティAは、何かをするスレッドを開始し、最終的にrunOnUiThreadを使用してUIを更新しますが、同時に、それは以下のコードのような活動Bを開始します。

public class HelloAndroid extends Activity { 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Thread myThread = new MyThread(); 
     myThread.start(); 

     Intent intent = new Intent(this, B.class); 
     startActivity(intent); 
    } 

    private class MyThread extends Thread { 

     public void run() { 
      /* Do somthing expensive */ 
      ...... 

      /* Update UI */ 
      HellowAndroid.this.runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 

        /* Do UI update for activity A */; 
       } 
      }); 

     } 
    } 
} 

どうかのスレッドがコードを実行しています"HellowAndroid.this.runOnUiThread(new Runnable ...)"と表示されているアクティビティはすでにBであり、スタックは現在ABで、Bが上部にあります。コード "HellowAndroid.this.runOnUiThread(new Runnable ...)"はアクティビティAを更新するために実行されますか?何が起こるか?この場合、アクティビティAのUIは更新されますか?

ありがとうございました。

答えて

3

アクティビティスレッドコードは引き続き実行され、アクティビティAのUIを更新しようとします。しかし、何らかの理由(例えば、メモリ不足など)でシステムがあなたの活動を停止させた場合、これを実行すると、ランタイムエラーになるリスクが高いことに注意してください。 onPauseでそれらをもう一度止めてください。

+1

またはAsyncTaskを使用 –

+0

イベントキューはグローバルオブジェクトですか? – Kai

+0

申し訳ありませんが、私は100%確信していませんが、私はおそらくアクティビティごとに行くでしょう、なぜあなたはそれを知る必要があるのでしょうか? – longhairedsi