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ó.

¿Cómo puedo mantenerlo funcionando? ¿Dónde, por ejemplo, pongo mi implementación de LocationListener? Gracias, Gary

¿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.

  • Android AlarmManager a veces tarde
  • Android: ¿Cómo ejecutar el servicio cuando la aplicación es visible?
  • ¿Hay alguna forma de forzar a IntentService a no ser recreado?
  • Mantener un servicio en ejecución aunque la aplicación esté cerrada.
  • Mejores prácticas para pubnub en android
  • Ciclo de vida de la clase de aplicación mientras se ejecuta el servicio
  • ¿Hay una manera de mantener los meta-datos en el manifiesto de Android privados al paquete?
  • Se muere la conexión de servicio XMPP
  • No se puede iniciar la intención del servicio
  • ¿Hay alguna forma de punto de ruptura dentro de las clases probadas?
  • Cómo forzar el onServiceDisconnected () obtener llamado?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.