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

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

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

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

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

Solutions Collecting From Web of "Зачем использовать Messenger вместо передачи ссылки на обработчик?"

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

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

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

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

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

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

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

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