处理程序执行的我把这个snipet从网站中的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
将首先执行完成。我需要一个解释,预先感谢你。
因此,它更可能是“任务的执行命令”,而不是“处理程序执行顺序”? –
将处理程序视为线程间通信的一种方式。敬酒只能从“主”或“UI”线程显示。关于要求主线程运行一些代码的方法是通过处理程序。因此,代码会要求主线在“中间”敬酒之前,要求它敬酒“完成”。从技术上讲,如果主线程被阻塞,它可能会等待直到它运行这些请求,但无论如何它会按照它们收到的顺序处理它们。 – orip
好吧,我明白了,基本上这些任务来自同一个线程,所以顺序依然很重要。 –