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是否会更新?
感谢。
答案 0 :(得分:3)
活动线程代码仍将运行并尝试更新活动A UI。但是请注意,如果系统由于任何原因(例如内存不足)停止了您的活动,那么您将面临运行时错误的严重风险。
更好的做法是在onResume上启动线程并在onPause中再次停止它们。