¿Por qué usar un Messenger en lugar de pasar la referencia a un Handler?

Tengo una actividad principal y servicio obligado. El servicio enlazado recibe un comando de la red, lo que desencadena un Mensaje para ser enviado a un Handler en la actividad principal. Tengo todo para trabajar al pasar la referencia del Handler al servicio. Y entonces … me tropecé con esta cosa llamada un Mensajero .

Messenger: Referencia a un manejador, que otros pueden utilizar para enviar mensajes a ella. Esto permite la implementación de la comunicación basada en mensajes a través de procesos, mediante la creación de un Messenger que apunta a un Handler en un proceso y la entrega de dicho Messenger a otro proceso.

Esto inspiró algunas preguntas:

  • ¿Significa el término proceso que no necesitaré usar un Messenger a menos que genere un proceso separado bajo las pautas Process and Thread ?
  • ¿Siempre es una buena práctica usar un Messenger?
  • ¿Está pasando una referencia al Handler normalmente una mala idea?

¿Significa el término proceso que no necesitaré usar un Messenger a menos que genere un proceso separado bajo las pautas Process and Thread?

Esto es correcto. Necesita un Messenger si desea enlazar un servicio remoto (por ejemplo, ejecutándose en otro proceso). En este caso, la única opción para proporcionar un servicio remoto con un puntero a su Handler sería utilizar un Messenger .

¿Siempre es una buena práctica usar un Messenger?

No lo diría. Utilícelo cuando sea realmente necesario – para servicios remotos o si inicia el servicio sin obligarlo. Puedes empaquetar a Messenger como un extra en un Intent y comenzar a trabajar con él. Por lo tanto, puede pasar referencia a un Handler sin obligar a un servicio. Este es otro caso cuando Messenger es útil.

¿Está pasando una referencia al Handler normalmente una mala idea?

Si maneja correctamente el registro y la cancelación de registro de Handler cuando la actividad comienza y se detiene, entonces debería estar bien. No es necesario usar Messenger para el servicio local. Si no se cancela el manejador correctamente, habrá pérdidas de memoria (el servicio se refiere a un manejador y el manejador refiere una actividad detenida).

A pesar de esto, prefiero utilizar el autobús de eventos Otto para servicios locales.

La principal ventaja de Messenger sobre el manejador es que Messenger puede poner en cola todos los mensajes enviados desde varios clientes. Mientras que Handler necesita un looper para hacer eso. Así que el mensajero da un borde extra cuando se utiliza en IPC entre los procesos remotos

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.