Cómo mantener un servicio de Intent funcionando
Tengo dos ejemplos de Intentservice. Uno es el ejemplo de descarga en el libro de propiedad común. El otro está en http://www.vogella.com/articles/AndroidServices/article.html#servicecommunication_handler . Ambos ejemplos muestran que el servicio ejecuta una tarea finita y ambos se destruyen aparentemente ejecutándose al final del ámbito del evento onHandleIntent.
El servicio que estoy escribiendo tiene que tener eventos y escuchar las cosas. Uno es un LocationListener que escucha el movimiento del GPS. Otro hace los postes a un servicio de REST y escucha para replys. Quiero que se ejecute hasta que haya transcurrido un tiempo o hasta que se le dijo a dejar de fumar por la actividad que lo inició.
- Servicio externo de Android desde una biblioteca (AAR, no Shared Service)
- Obtención de resultados de varias AsyncTasks
- ¿Puede existir un servicio de fondo sin su aplicación principal?
- ¿Cómo iniciar y detener el servicio de Android desde una shell de anuncios?
- Mantenga el servicio en ejecución
¿Cómo puedo mantenerlo funcionando? ¿Dónde, por ejemplo, pongo mi implementación de LocationListener? Gracias, Gary
- Cómo obtener detalles del proceso de ejecución de fondo android
- Uso del servicio para ejecutar fondo y crear notificaciones
- Error en la conexión de Google Analytics con Google para el servicio
- Android: intent.putExtra en una clase de servicio para obtener notificaciones
- Enviar datos de Servicio a mi actividad
- Cómo manejar correctamente startForegrounds dos notificaciones
- Servicio de reconocimiento continuo de voz de Android
- Android bluetooth SDP no reconoce el servicio anunciado en JAVAME
¿Cómo puedo mantenerlo funcionando?
No lo haces. IntentService
está diseñado para hacer una pieza de trabajo (o tal vez algunos de una cola, si los comandos pasan a entrar rápidamente), a continuación, cierre.
El servicio que estoy escribiendo tiene que tener eventos y escuchar las cosas.
Entonces usted no debe utilizar un IntentService
. Utilice un Service
regular, con su propio hilo de fondo, según sea necesario.
Para mantener un servicio en ejecución, su servicio necesita devolver START_STICKY
en el método de servicio onStartCommand()
.
Con esto, el servicio se ejecutará incluso si sale de su actividad.
Nota: El Android todavía mata servicios después de algún tiempo (30 mintus a 1 hora) si no son servicios de primer plano. Utilice startForeground(notification)
para convertirlo en primer plano.
buena suerte
Usted puede lograr esto en cualquiera de dos maneras,
- AlarmManager
- TimerTask
AlarmManager es la clase in-buite de android que te permite ejecutar cierta acción en un tiempo determinado peroid.
TimerTask hace lo mismo que AlarmManager, puede repetir cierta acción de su código una y otra vez.
Sin embargo AlarmManager es ligher en la ejecución por lo que le sugiero que vaya con la clase AlarmManager.
Cree un AlarmManager que recoja las Coordenadas GPS y las publique al servidor en intervalos regulares.
Echa un vistazo a este ejemplo de AlarmManager.