使用Handler的执行顺序

时间:2018-10-03 14:42:26

标签: android

运行此命令时,首先显示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首先出现?

1 个答案:

答案 0 :(得分:4)

您的方法尚未完成执行,因此Handler需要等到它发布后才能运行Runnable。

Looper可以尽快执行它,但是当您的方法仍在执行时就不能执行。 Toast 1运行后,onCreate()完成执行,并且处理程序可以执行该Runnable。