android中handler延迟问题

如下面两端代码都是在新线程中的run方法中,为什么会有不同的结果,我想实现的是将数字按秒递增的效果,第一种方式为什么不是我想要的结果,senMessageDelayed()这个方法不是延迟发送么,理论上应该是和第二段代码等效吧,求大神解释这个函数的机制。

            int a = 1;
            while(true)
            {
                Message m = new Message();
                m.obj = ""+a;
                m.what = 0x123;
                handler.sendMessageDelayed(m, 1000);
                a++;
            }
            int a = 1;
            while(true)
            {
                Message m = new Message();
                m.obj = ""+a;
                m.what = 0x123;
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                handler.sendMessage(m);
                a++;
            }
阅读 7.6k
2 个回答

因为

handler.sendMessageDelayed(m, 1000);

这段代码是异步的,程序会1秒后把这个message传递给handler,但是程序不会在这里阻塞,while循环仍在继续执行.

所以1秒后,handler连续收到了n个message.

handler.sendMessageDelayed(m, 1000)搭配TimeSchedule可以实现你想要的效果

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题