¿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?

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 🙂

  • ¿Cómo encontrar las aplicaciones en ejecución en programación en android?
  • Detectar bloqueo de servicio
  • Descargar varios archivos con una barra de progreso en ListView Android
  • El servicio de Android comienza de forma automática / automática
  • Android ResultReceiver a través de paquetes
  • Nombre de la Actividad o Receptor que llama al Servicio
  • ¿Cómo iniciar el servicio con Alarm Manager en Android?
  • Continuar el servicio incluso si la aplicación se ha eliminado de la aplicación Reciente.
  • Ejecutar un servicio con privilegios de root o agregar permisos con root
  • Android Service no se inicia
  • ¿Cómo realizar llamadas JNI desde un servicio incluso si la aplicación está cerrada?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.