澄清我的代码中的处理程序?

时间:2014-07-21 08:30:40

标签: android multithreading handler looper

这是我的代码 - 附加到main(ui线程)

的消息队列的处理程序
handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            progress.setProgress(msg.arg1);
            super.handleMessage(msg);
        }
    };

And the code for a handler sending a message to the message queue of the main thread
private class ProgressThread implements Runnable{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        //reuse message to conserve resources
        Message message = Message.obtain();
        for(int count=0;count<100;count++){
            message.arg1 = count;
            //send message the main thread's message queue
            handler.sendMessage(message);
        }
    }

}

我知道looper会向处理程序发送消息,以便处理来自消息队列的消息。我也知道广播接收者,服务,活动和内容提供者都可以发布到消息队列。我的代码是否存在缺陷,而不是主UI处理程序处理的每个消息都会设置arg1?我很困惑,因为当我运行代码时,运行正常。

1 个答案:

答案 0 :(得分:1)

AFAIK,即使可能有多个Handler与一个Looper / MessageQueue相关联,Handler也只会处理发送到同一个Handler的消息。

由于没有其他组件会向您的处理程序发送消息,因此您的代码没问题。

我创建了一个展示此here的玩具项目。

我试图做的是,即使两个处理程序都处理UI线程中的消息,第一个处理程序将只处理发送给它的消息;第二个处理程序也是如此。换句话说:它是单播,而不是广播 - 起初也让我觉得奇怪。