Tengo un servicio que se ejecuta una vez que se inicia la aplicación y me preguntaba cómo puedo obtener datos de ese servicio para una actividad en cualquier momento sin tener que reiniciar el servicio¿Cómo obtener datos de un servicio que ya se está ejecutando?
Respuesta
Para hacer esto, enlaza el servicio. Se puede encontrar mucha información en los documentos de Android aquí: http://developer.android.com/guide/topics/fundamentals/bound-services.html
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.
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)
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.
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.
- 1. cómo evitar que el servicio se ejecute nuevamente si ya está ejecutando android
- 2. ¿Cancelar una tarea que ya se está ejecutando con Apio?
- 3. Cómo obtener contenido que ya está leído
- 4. comisión si ya se está ejecutando
- 5. Verificando un proceso php ya se está ejecutando
- 6. ¿Verifica si se está ejecutando un servicio de Windows?
- 7. Detectar un proceso que ya se está ejecutando en Windows con C# .NET
- 8. ¿Cómo comprobar si una aplicación WPF ya se está ejecutando?
- 9. ¿Obtener instancia de la actividad que se está ejecutando actualmente?
- 10. C#: Redirigir salida estándar de un proceso que ya se está ejecutando
- 11. Obtener el nombre del método actual que se está ejecutando
- 12. Bash: redirigir la salida de un proceso que ya se está ejecutando?
- 13. Ruby: obtener el archivo que se está ejecutando
- 14. ¿Cómo detectar con precisión si un trabajo de SQL Server se está ejecutando y lidiar con el trabajo que ya se está ejecutando?
- 15. eclipse stop popup "Lanzamiento web ya se está ejecutando"
- 16. ¿Cómo entender una base de datos que ya está desarrollada?
- 17. ¿Cómo acceder a un contexto de aplicación que ya se está ejecutando desde un servicio de adaptador de sincronización en Android?
- 18. apropiante un hilo que se está ejecutando sincronizado método
- 19. ¿Cómo puedo saber si un proceso ya se está ejecutando usando C#?
- 20. Cómo comprobar si se está ejecutando un Thread de Android
- 21. ¿Está ejecutando un servicio de Windows en modo consola?
- 22. ¿Por qué el servicio de datos WCF funciona mejor mientras se está ejecutando Fiddler?
- 23. ¿Cómo determinar si un servicio de Android se está ejecutando en primer plano?
- 24. ¿Cómo puedo verificar si se está ejecutando un servicio de Windows?
- 25. Cómo obtener la ruta del sistema de archivos de la clase que se está ejecutando
- 26. ¿Cómo comprobar si un servicio se está ejecutando a través de un archivo por lotes e iniciarlo, si no se está ejecutando?
- 27. ¿Cómo obtener la ubicación de la DLL que se está ejecutando actualmente?
- 28. Cómo obtener la ruta de acceso del código javascript que se está ejecutando actualmente
- 29. ¿Cómo obtener el nombre de la prueba que se está ejecutando actualmente en spock?
- 30. ¿Se está ejecutando un subproceso en iOS?