Cómo hacer que el servicio de Android se comunique con Activity

Estoy escribiendo mi primera aplicación de Android y estoy tratando de entender la comunicación entre servicios y actividades. Tengo un servicio que se ejecutará en segundo plano y que hará algunos gps y registros basados en el tiempo. Tendré una Actividad que se utilizará para iniciar y detener el Servicio.

Primero, necesito poder determinar si el Servicio se está ejecutando cuando se inicia la Actividad. Hay algunas otras preguntas aquí sobre eso, así que creo que puedo resolverlo (pero no dudes en ofrecer consejos).

Mi verdadero problema: si la Actividad se está ejecutando y se inicia el Servicio, necesito una forma para que el Servicio envíe mensajes a la Actividad. Cadenas simples y enteros en este punto: mensajes de estado en su mayoría. Los mensajes no sucederán regularmente, por lo que no creo que sondear el servicio sea una buena opción si hay otra. Solo quiero esta comunicación cuando el usuario ha iniciado la Actividad; no quiero iniciar la Actividad desde el Servicio. En otras palabras, si inicia la Actividad y el Servicio se está ejecutando, verá algunos mensajes de estado en la IU de la Actividad cuando ocurra algo interesante. Si no inicia la Actividad, no verá estos mensajes (no son tan interesantes).

Parece que debería poder determinar si el Servicio se está ejecutando y, de ser así, agregar la Actividad como escucha. Luego, elimine la Actividad como oyente cuando la Actividad se detenga o se detenga. ¿Es eso realmente posible? La única forma en que puedo resolverlo es hacer que la Actividad implemente Parcelable y cree un archivo AIDL para poder pasarlo a través de la interfaz remota del Servicio. Sin embargo, eso parece excesivo, y no tengo idea de cómo la Actividad debe implementar writeToParcel () / readFromParcel ().

¿Hay una manera más fácil o mejor? Gracias por cualquier ayuda.

EDITAR:

Para cualquiera que esté interesado en esto más adelante, hay un código de muestra de Google para manejar esto a través de AIDL en el directorio de muestras: /apis/app/RemoteService.java

Respuestas a la pregunta(12)

Su respuesta a la pregunta