使用Handler的执行顺序

莲花

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

流浪者

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章