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++;
            }

Android handler

leonana 9 years, 3 months ago

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

ludaxx answered 9 years, 3 months ago

因为


 handler.sendMessageDelayed(m, 1000);

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

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

黑色花人无叶 answered 9 years, 3 months ago

Your Answer