2011-05-21 10 views

Respuesta

4

Si el servicio ya se está ejecutando, llamar al startService() no "reinicia el servicio". Simplemente envía un comando para ser recogido por el servicio en onStartCommand(). Por lo tanto, puede enviar un comando que active el servicio para que haga algo en nombre de la actividad, lo que podría implicar que las comunicaciones del servicio vuelvan a la actividad (p. Ej., A través de Messenger).

O, como señala @Tom Dignan, puede enlazar al servicio. Solo sea un poco cuidadoso al lidiar con los cambios de configuración, como cuando el usuario gira la pantalla.

5

Sin ofender, pero el modo "Messenger" y "vinculante" me mantuvo ocupado durante aproximadamente 2 días para averiguarlo. No es que esté mal, pero me complicó demasiado las cosas.

En mi opinión, es más fácil para un servicio transmitir los datos de modo que una Actividad pueda acceder a los datos cuando estén disponibles. hacer el tutorial en este enlace: http://www.websmithing.com/2011/02/01/how-to-update-the-ui-in-an-android-activity-using-data-from-a-background-service/comment-page-1/#comment-734

(me llevó 10 minutos para averiguar y poner en práctica ... excelente tutorial)

1

la actualidad (finales de 2013) hay mejores soluciones para conseguir una referencia a una ejecución servicio en Android, solo use una biblioteca como Otto o EventBus.

Añadir un EventBus en su actividad y servicio, poner en práctica el método onEvent() en ambos lados, crear una o dos xyzEvent clases (xyz = el nombre de evento), registrar las referencias de actividad y de servicios en el EventBus (el 'esto') .

publicar un evento hacia el servicio de su actividad en el EventBus, lo coge en el método de su servicio onEvent, publicar un nuevo evento de nuevo hacia la actividad, lo coge en el método de su actividad onEvent: ahora usted tiene su referencia de servicio (this del servicio) disponible dentro de la actividad.

Todo listo y listo sin ningún problema. Actividad y servicio bastante desacoplados y fáciles de implementar. Nada especial al respecto. Sin enlace directo, sin mensajeros, sin AIDL. Solo los ancianos K.I.S.S. principio.

Ahora tiene una referencia de su servicio dentro de su actividad y puede llamar a cualquier método directo disponible dentro del servicio.

1

Para obtener datos de un servicio en ejecución a la actividad (por ejemplo, al hacer clic en un botón), debe usar el Servicio limitado, enlazar a un servicio, obtener una referencia y llamar a un método público. ver más here y here

Para enviar datos del servicio a la actividad puede usar Handlers/Messenger usando hilos o intenciones de emisión y receptores de difusión.

Cuestiones relacionadas