我从一个解释 Android 中的处理程序(线程事物)的网站上截取了这个片段。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Thread myThread = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 4; i++) {
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (i == 2) {
mUiHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(MyActivity.this, "I am at the middle of background task",
Toast.LENGTH_LONG)
.show();
}
});
}
}//ends for()
// THE SECOND HANDLER, RIGHT HERE!
mUiHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(MyActivity.this,
"Background task is completed",
Toast.LENGTH_LONG)
.show();
}
});
} //ends run()
});
myThread.start();
从第二次执行时输出的任务来看Handler
,即
Toast.makeText(MyActivity.this,
"Background task is completed",
Toast.LENGTH_LONG)
.show();
似乎文章的作者非常确定第二个Handler
将最后执行。
我的问题是,第二个Handler
是否会在第一个Handler
完成工作后最后执行。虽然,当我多次运行它时,是的,它是最后执行的。在我看来,由于Handler
是在后台完成的,所以Thread
我们不应该知道(甚至预测)这两个任务中的哪一个Handler
将首先执行。我需要一个解释,提前谢谢你。