运行此命令时,首先显示Toast 1,然后显示Toast 2:
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.activity_main);
Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
//Toast 2
Toast.makeText(MainActivity.this, "Toast_2", Toast.LENGTH_SHORT).show();
}
});
// Toast_1
Toast.makeText(this, "Toast 1", Toast.LENGTH_SHORT).show();
}
我知道Runnable对象被推送到MessageQueue,但是Looper何时在主线程中执行它?为什么Toast_1首先出现?
答案 0 :(得分:4)
您的方法尚未完成执行,因此Handler需要等到它发布后才能运行Runnable。
Looper可以尽快执行它,但是当您的方法仍在执行时就不能执行。 Toast 1运行后,onCreate()
完成执行,并且处理程序可以执行该Runnable。