¿Cómo manejar IPC entre un servicio y una actividad (y su subactividad)?

La comunicación entre dos procesos diferentes (un servicio y una actividad) en Android se puede gestionar a través de Messenger o AIDL : basta con que una actividad se vincule a un servicio.

Sin embargo, ¿qué sucede si esta actividad tiene una o más subactividad? Desde el momento en que la actividad principal inicie una subactividad, me gustaría que la comunicación fuera redirigida a la subactividad; De manera similar, cuando se destruye la subactividad, me gustaría que la comunicación se redirigiera de nuevo a la actividad principal, etc.

Ejemplo 1:

  1. MyService <— IPC —> MainActivity
  2. MainActivity lanza SubActivity, luego MyService <— IPC —> SubActivity
  3. SubActivity se destruye, entonces MyService <— IPC —> MainActivity

Ejemplo # 2:

  1. MyService <— IPC —> MainActivity
  2. MainActivity lanza FirstSubActivity, luego MyService <— IPC —> FirstSubActivity
  3. FirstSubActivity lanza SecondSubActivity, luego MyService <— IPC —> SecondSubActivity
  4. SecondSubActivity se destruye, entonces MyService <— IPC —> FirstSubActivity
  5. FirstSubActivity se destruye, entonces MyService <— IPC —> MainActivity

¿Cómo manejar estos casos?

2 Solutions collect form web for “¿Cómo manejar IPC entre un servicio y una actividad (y su subactividad)?”

Desea tener una única entidad responsable de vincular el servicio y mantener la conexión y necesita que dicha entidad NO sea una instancia de actividad. Prueba esto:

  • Crear una clase base (BaseActivity) que subclases Actividad
  • Derive todas tus actividades de BaseActivity
  • Administre la conexión entre su aplicación y su servicio utilizando métodos en BaseActivity. BaseActivity necesitará tener variables estáticas (clase) que mantengan un registro de la conexión al servicio y traten de enlazarlo al servicio y cerrarlo cuando haya terminado con él.
  • Asegúrese de utilizar el contexto de la aplicación (no el contexto de la actividad) al enlazar el servicio para que el sistema operativo no destruya la conexión al servicio cuando se destruya la actividad.

De esta manera usted no tiene que preocuparse por crear y eliminar las conexiones entre las diferentes actividades y su servicio. Sólo hay una conexión entre su aplicación completa (todas las actividades) y su servicio.

Me doy cuenta de que no he explicado todos los detalles sangrientos, pero espero que tengas la idea básica.

¿Alguna vez ha pensado en la siguiente solución? En lugar de enlazar Actividad con servicio, puede iniciar su actividad con el comando startService () y luego comunicarse con Intents and Receivers. De esta manera puede iniciar otra actividad, llamando al servicio de su estado e interactuar con él donde quiera 🙂

  • Creación de un servicio en Android
  • Usuario apropiado del servicio de fondo / receptor de difusión
  • ¿Cómo registrar un servicio de reconocimiento de voz personalizado?
  • ¿Se puede utilizar un LoaderManager de un servicio?
  • Empleos para GCM Network Manager
  • Detectando Android L Battery Saver
  • Android: escucha los mensajes SMS entrantes
  • Buscador de reproductores multimedia Android
  • ¿Está garantizado un servicio android para llamar a onDestroy ()?
  • ¿Es posible simular servicios de android bajo pruebas de unidad?
  • ¿Cómo podemos evitar que un servicio muera por un sistema operativo?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.