Java 做安卓消息';什么';代码在处理程序或线程的范围内必须是唯一的?
消息“what”字段对于处理程序实例或一个或多个处理程序实例可能关联的线程的MessageQueue是唯一的吗?阅读“处理程序允许您发送和处理与线程MessageQueue关联的消息和可运行对象。每个处理程序实例都与一个线程和该线程的消息队列相关联。当您创建一个新的处理程序时,它被绑定到正在创建它的线程的线程/消息队列——从那时起,它将向该消息队列传递消息和可运行文件,并在它们从消息队列中出来时执行它们“这似乎表明消息‘what’代码对于MessageQueue来说必须是唯一的,因此在单个线程的范围内,而不是在单个Handler实例的范围内 在整个项目中,我有几个处理程序对象与我的UI线程关联,所以我必须确保发送到这些处理程序中任何一个的所有消息“what”代码都是唯一的,还是每个处理程序实例都必须是唯一的 例如,在执行以下代码并收到两条消息后,日志会说什么:Java 做安卓消息';什么';代码在处理程序或线程的范围内必须是唯一的?,java,android,multithreading,Java,Android,Multithreading,消息“what”字段对于处理程序实例或一个或多个处理程序实例可能关联的线程的MessageQueue是唯一的吗?阅读“处理程序允许您发送和处理与线程MessageQueue关联的消息和可运行对象。每个处理程序实例都与一个线程和该线程的消息队列相关联。当您创建一个新的处理程序时,它被绑定到正在创建它的线程的线程/消息队列——从那时起,它将向该消息队列传递消息和可运行文件,并在它们从消息队列中出来时执行它们“这似乎表明消息‘what’代码对于MessageQueue来说必须是唯一的,因此在单个线程的
class MainActivity extends Activity{
public static final String TAG = "MainActivity";
public static final int FIRST_PURPOSE_MESSAGE_CODE = 1;
public static final int SECOND_PURPOSE_MESSAGE_CODE = 1;
...
private static class FirstUIThreadHandler extends Handler{
...
@Override
public void handleMessage(Message msg){
switch(msg.what){
case FIRST_PURPOSE_MESSAGE_CODE:
Log.v(TAG,"handling the first message");
break;
}
}
}
...
private static class SecondUIThreadHandler extends Handler{
...
@Override
public void handleMessage(Message msg){
switch(msg.what){
case SECOND_PURPOSE_MESSAGE_CODE:
Log.v(TAG,"handling the second message");
break;
}
}
}
...
FirstUIThreadHandler firstUIThreadHandler = new FirstUIThreadHandler(...);
SecondUIThreadHandler secondUIThreadHandler = new SecondUIThreadHandler(...);
Message firstMsg = firstUIThreadHandler.obtainMessage();
firstMsg.what = FIRST_PURPOSE_MESSAGE_CODE;
firstUIThreadHandler.sendMessage(firstMsg);
Message secondMsg = secondUIThreadHandler.obtainMessage();
secondMsg.what = SECOND_PURPOSE_MESSAGE_CODE;
secondUIThreadHandler.sendMessage(secondMsg);
...
}
消息将仅传递给用于发送消息的处理程序,两个不同的处理程序不会共享有关发送给不同处理程序的消息的任何信息,因此,如果在不同的消息中具有相同的“what”属性,则它将传递给名为“sendMessage”的处理程序的“handleMessage(message msg)”(yourMessage)”,例如:
secondUIThreadHandler.sendMessage(secondMsg);
在上面的代码中,这意味着消息将仅由第二个处理程序接收,并且它将能够使用“what”属性,无论该属性是否与secondUIThreadHandler中使用的当前消息相同
希望有帮助
问候