这是我的代码 - 附加到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?我很困惑,因为当我运行代码时,运行正常。
答案 0 :(得分:1)
AFAIK,即使可能有多个Handler与一个Looper / MessageQueue相关联,Handler也只会处理发送到同一个Handler的消息。
由于没有其他组件会向您的处理程序发送消息,因此您的代码没问题。
我创建了一个展示此here的玩具项目。
我试图做的是,即使两个处理程序都处理UI线程中的消息,第一个处理程序将只处理发送给它的消息;第二个处理程序也是如此。换句话说:它是单播,而不是广播 - 起初也让我觉得奇怪。