关于runOnUiThread的问题

时间:2011-03-07 23:02:20

标签: android

Android doc说关于runOnUiThread:“如果当前线程不是UI线程,则该操作将发布到UI线程的事件队列中。”

我的问题是,不同的活动会共享同一个事件队列,还是每个活动都有自己的事件队列?

假设活动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,并且堆栈当前是A B,B位于顶部。是否仍会执行代码“HellowAndroid.this.runOnUiThread(new Runnable ...)”来更新活动A?会发生什么?在这种情况下,活动A的UI是否会更新?

感谢。

1 个答案:

答案 0 :(得分:3)

活动线程代码仍将运行并尝试更新活动A UI。但是请注意,如果系统由于任何原因(例如内存不足)停止了您的活动,那么您将面临运行时错误的严重风险。

更好的做法是在onResume上启动线程并在onPause中再次停止它们。

相关问题