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.

  • ¿Cuándo y por qué se requiere PARTIAL_WAKE_LOCK?
  • Servicio, WakeLock
  • "Service MeasurementBrokerService está en uso" está mostrando en mi proceso de solicitud
  • ¿Cómo descargar el archivo con el servicio en android?
  • Android escucha los mensajes del socket del servidor
  • La aplicación de Android que supervisa las llamadas entrantes mantiene el teléfono despierto
  • Servicios android - error: servicio no registrado
  • Ayúdame a usar correctamente los Servicios y los Hilos
  • Android: no se puede iniciar la intención de servicio: ¿no se encuentra?
  • Android startService Synchronous?
  • Android: Obtener una instancia de un servicio en ejecución
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.