Android несколько экземпляров обработчика, прослушивающих один и тот же цикл

#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. Если вы нашли мой ответ полезным, пожалуйста, проголосуйте и отметьте как принятый ответ. Спасибо за ваше драгоценное время