Intereting Posts
С 0.4.3 Android Studio, ошибка: «Синхронизация проекта Gradle не удалась. Основные функции (например, редактирование, отладка) не будут работать должным образом " Calendar.WEEK_OF_MONTH дает разные результаты на двух разных устройствах Эмуляция Android в виртуальном поле в eclipse Предупреждение об уровне API для Android Studio не отображается Анимация перевода и масштабирования вида в Android Android Java: отключить экран Большие изображения (из файла), не загружаемые в Пикассо, не видно очевидной ошибки Как подключить плату баланса wii с помощью android IllegalStateException – библиотека поддержки фрагментов Navigator.geolocation.GetCurrentPosition throws «Ошибка последнего провайдера местоположения отключена» Android nfcA.connect (), nfcA.transceive (), nfcA.setTimeout () и nfcA.getMaxTransceiveLength () Получить представление родителя из макета Можно ли вызывать метод onCheckedChanged без взаимодействия? Android, AsyncTask, длительные процессы и изменения ориентации Как использовать Android GradientDrawable

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

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

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

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

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

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

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

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

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

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

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

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

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