Comunicación de Android entre dos servicios

Sé que una actividad puede comunicarse con un servicio local usando la interfaz de IBinder; Estoy tratando de encontrar una forma de comunicación entre dos servicios.

Específicamente, tengo mi servicio principal iniciando un IntentService para manejar las subidas de archivos. Quiero que este IntentService informe de nuevo al servicio principal una vez que se termine de cargar, y antes de que muera.

¿Alguna idea acerca de cómo esto sucedería?

Usted tiene que utilizar BroadcastReceiver para recibir intenciones, y cuando usted quiere comunicarse simplemente hace un intento con los valores apropiados.

De esta manera usted debe ser capaz de hacer una comunicación bidireccional entre cualquier componente.

En Android, hay una forma especial de completar tareas como la tuya. Mira AIDL (no está bien documentado en documentos oficiales, pero hay algunas fuentes adicionales en la web). Esta es una forma de implementar la comunicación bidireccional entre cualquier componente colocado en procesos separados. En comparación con BroadcastReceivers, usando esto obtendrían llamadas directas y callbacks, que estarían menos sucias que confiar en algo que vendría de algún lugar en BroadcastReceiver.

Para alcanzar el efecto necesario, tendrá que definir una interfaz para una devolución de llamada y una interfaz para realizar acciones (con una devolución de llamada suministrada o métodos de registro / anulación de registro). Después de recibir algún comando utilizando la segunda interfaz, debe realizar el trabajo y devolver el resultado a través de la devolución de llamada. Para llegar a la conclusión asíncrona, agregue una clave de trabajo "oneway" antes de la firma del método (tipo de retorno). Para separar los parámetros de entrada y salida (si es necesario), utilice las palabras clave "in", "out" y "inout" cerca de los parámetros.

Como se trata de restricciones, sólo primitivas, matrices y parcelables (y matrices parcelables) pueden ser transferidos entre procesos.

Para controlar el ciclo de vida de las devoluciones de llamada y la atomicidad de las operaciones, utilice RemoteCallbacksList para almacenar devoluciones de llamada registradas y notificar a los destinatarios utilizando el duplicado de su lista obtenido de beginBroadcast.

Si tienes algún problema, puedes preguntar aquí.

  • Service vs Thread en Android
  • Servicio Android + cuenta atrás = no funciona
  • Detener o matar un servicio
  • Múltiples temas en la actividad / servicio de Android
  • Android cómo mantener la biblioteca nativa cuando la aplicación se detuvo
  • El oyente de ubicación funciona desde un servicio pero no es un servicio de IntentService
  • ¿Cómo descargar el archivo con el servicio en android?
  • ¿Cómo detectar cuándo el usuario inicia otra aplicación? (Androide)
  • Cómo enviar datos de IntentService a clase Non-Activity
  • ¿Es posible crear el widget como Google Play Música en la pantalla de bloqueo?
  • ¿Cómo iniciar android.intent.action.CALL en servicio?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.