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ó.
- ¿Debo usar PendingIntent.getService () o getBroadcast con AlarmManager?
- Android: Objeto personalizado en AIDL
- Mantenga el servicio en funcionamiento incluso si el teléfono está apagado
- ¿Dónde debo usar Servicio, AsyncTask y Broadcast Receiver?
- Servicio enlazado de Android, ¿qué sucede cuando la actividad no lo enlaza?
¿Cómo puedo mantenerlo funcionando? ¿Dónde, por ejemplo, pongo mi implementación de LocationListener? Gracias, Gary
- Vista web de Android dentro de un servicio?
- Cómo ejecutar un servicio todos los días al mediodía, y en cada inicio
- Mejor momento / ubicación para configurar un AlarmManager
- Using android: process = ": remote" recrea el objeto de aplicación android
- Proporcionar un servicio de fondo para otras aplicaciones
- Cómo detener un IntentService mientras hay muchos IntentService en ejecución
- Receptor de difusión de portapapeles android
- AlarmManager no se repite
¿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.