Intereting Posts
Как загрузить несколько файлов одновременно с помощью intenservice в Android? InflateException: двоичная строка XML-файла # 1: ошибка раздувания класса <unknown>, вызванная OutOfMemoryError Как изменить размер растрового изображения после захвата изображения через мое приложение Фрагментная активность переходит в нуль при добавлении другого фрагмента Android cursor, как получить нулевые значения из столбцов Сетевые запросы RxJava и кэширование Вызов мягкой клавиатуры Android из файла C ++ Вкладки дизайна материалов для Android android 5.0 Уведомления Firebase, не работающие в Android Emulator Сообщения об ошибках libagl alphaPlaneWorkaround в LogCat Захват IP-камеры и публикация на моем сайте Как применять различные значки и другой текст в учебнике просмотра сетки андроида? Использование стилей шрифтов по умолчанию в Android Переместить приложение с производства на бета-версию Android Как правильно выровнять курсор EditText?

Зачем использовать Messenger вместо передачи ссылки на обработчик?

У меня есть основное обслуживание и связанный сервис. Связанная служба получает команду из сети, которая запускает сообщение, которое должно быть отправлено обработчику в основном действии. Я получил все, чтобы работать, передав ссылку Handler на службу. И затем … Я наткнулся на эту вещь, названную Посланником .

Messenger: ссылка на обработчик, который другие могут использовать для отправки сообщений на него. Это позволяет реализовать связь на основе сообщений через процессы, создавая Messenger, указывающий на обработчик в одном процессе и передавая этот Messenger другому процессу.

Это вызвало несколько вопросов:

  • Является ли термин «процесс» означать, что мне не нужно будет использовать Messenger, если я не создам отдельный процесс в соответствии с принципами « Процесс и поток» ?
  • Всегда ли полезно использовать Messenger?
  • Проводит ли ссылка на обработчик, как правило, плохую идею?

Является ли термин «процесс» означать, что мне не нужно будет использовать Messenger, если я не создам отдельный процесс в соответствии с принципами «Процесс и поток»?

Это верно. Вам нужен Messenger если вы хотите связать удаленную службу (например, работать в другом процессе). В этом случае единственным вариантом предоставления удаленной службы указателем на Handler будет использование Messenger .

Всегда ли полезно использовать Messenger?

Я бы так не сказал. Используйте его, когда это действительно необходимо – для удаленных служб или если вы запускаете сервис, не привязывая его. Вы можете отправить пакет Messenger в дополнение к Intent и начать с ним сервис. Таким образом, вы можете передать ссылку на Handler не связывая службу. Это еще один случай, когда Messenger полезен.

Проводит ли ссылка на обработчик, как правило, плохую идею?

Если вы должным образом обрабатываете регистрацию и отмену регистрации Handler когда активность начинается и останавливается, тогда вы должны быть в порядке. Тогда нет необходимости использовать Messenger для локального обслуживания. Если вы не отмените обработчик должным образом, произойдет утечка памяти (служба ссылается на обработчик, а обработчик ссылается на остановленную активность).

Несмотря на это, я предпочитаю использовать автобус событий Otto для местных служб.

Основным преимуществом Messenger для обработчика является то, что Messenger может помещать в очередь все сообщения, отправленные от разных клиентов. В то время как Handler нуждается в петлере для этого. Таким образом, посланник предоставляет дополнительное преимущество при использовании в IPC среди удаленных процессов