#android
#Android
Вопрос:
Я пытаюсь реализовать обработчики таким образом:
Из потока отправьте сообщение главному обработчику
Handler myHandler = new Handler(Looper.getMainLooper())
Message msg = myHandler.obtainMessage;
msg.what = MY_ID;
myHandler.sendMessage(msg);
В моем фрагменте я пытаюсь передать сообщение следующим образом
Handler localHandler = new Handler(Looper.getMainLooper()){
@Override
public void handleMessage(@NonNull Message msg) {
if (msg.what == MY_ID)
do something
}
};
Почему это не работает, когда оба обработчика используют один и тот же основной цикл пользовательского интерфейса? Во всех примерах, которые я видел, как поток, так и фрагмент используют одну и ту же ссылку на обработчик, поэтому это может быть невозможно. Но если да, то почему?
Ответ №1:
Вам нужно отправить сообщение тому обработчику, который наблюдает за обработкой сообщений, например, в вашем случае это «localHandler». Вы должны отправить сообщение этому обработчику, а не MyHandler.
Комментарии:
1. Да, я знаю, что это работает. Но для этого требуется, чтобы я вводил ссылку на обработчик во все места в моем коде, где я хочу прослушивать сообщения. Я надеялся, что, когда оба обработчика используют один и тот же цикл, они получат одинаковые сообщения.
2. это не будет работать так, как вы описываете. Используйте RxJava для публикации темы или расширенных данных в реальном времени, это лучше подойдет для вашего сценария. developer.android.com/topic/libraries/architecture /…
3. спасибо, я понял, что это работает не так, как я надеялся.
4. Если вы нашли мой ответ полезным, пожалуйста, проголосуйте и отметьте как принятый ответ. Спасибо за ваше драгоценное время