gpt4 book ai didi

java - Android Message 'what' 代码是否需要在处理程序或线程范围内是唯一的?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:55:00 24 4
gpt4 key购买 nike

消息“什么”字段对于处理程序实例或一个或多个处理程序实例可能与之相关联的线程的消息队列是唯一的吗? docs阅读“Handler 允许您发送和处理与线程的 MessageQueue 相关联的 Message 和 Runnable 对象。每个 Handler 实例都与一个线程和该线程的消息队列相关联。当您创建一个新的 Handler 时,它会绑定(bind)到线程/消息创建它的线程的队列——从那时起,它将向该消息队列传递消息和可运行对象,并在它们从消息队列中出来时执行它们”,这似乎表明消息“什么”代码必须是唯一的到 MessageQueue,因此在单个线程的范围内,而不是 Handler 的单个实例。

在我的整个项目中,我有几个与我的 UI 线程相关联的处理程序对象,所以我是否必须确保发送到这些处理程序中的任何一个的所有消息“什么”代码都是唯一的,或者它们是否只需要是唯一的每个处理程序实例?

例如,执行以下代码并收到两条消息后,日志会显示什么内容:

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(yourMessage)”的处理程序的“handleMessage(Message msg)”,例如:

secondUIThreadHandler.sendMessage(secondMsg);

在上面的代码中,这意味着消息将仅由第二个处理程序接收,并且它将能够使用“what”属性,无论该属性是否与另一个消息相同,而不是当前使用的消息第二个 UIThreadHandler。

希望对您有所帮助!

问候!

关于java - Android Message 'what' 代码是否需要在处理程序或线程范围内是唯一的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25879487/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com