es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Solicitudes HTTP periódicas en el servicio de primer plano de Android.

Esta pregunta se trata más sobre qué herramientas utilizar y no sobre el código exacto.

Tengo una aplicación de Android que permite al usuario definir algunas tareas. Cada tarea está relacionada con consultas REST HTTP periódicas, digamos cada 5 minutos. Y debe continuar incluso si el usuario cierra la aplicación. La información sobre el progreso se muestra mediante un servicio en primer plano. Cuando la tarea finaliza, ya sea que falle o tenga éxito, se envía una notificación.

Ahora mi solución es la siguiente:
Cuando la aplicación se inicia, me conecto a un servicio. Cuando el usuario agrega una tarea, la envío al servicio y el servicio inicia un servicio en primer plano. La tarea se ejecuta en un hilo en un bucle infinito: enviar solicitud -> dormir -> enviar solicitud -> dormir…
Cuando la tarea finaliza, envío una notificación de transmisión. Y si todas las tareas se completan, entonces detengo el servicio en primer plano (más o menos).

Parece funcionar, pero tengo la sensación de que no estoy utilizando las herramientas adecuadas :).
¿Hay una mejor manera de ejecutar una tarea periódica como esta? ¿Qué pasa si quisiera cambiar la frecuencia en el ínterin?
¿Debería utilizar transmisiones para enviar notificaciones desde el servicio a la aplicación? Usé listeners pero parece que no hay una forma confiable de eliminar un listener cuando la aplicación se cierra por el “sistema”.
Por último, ¿es un buen lugar para realizar todas estas tareas un servicio en primer plano? ¿O tal vez solo debería ser responsable de mostrar notificaciones?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en android, android-service, android-broadcast, aquí están mis sugerencias:

    • En lugar de ejecutar la tarea periódica en un bucle infinito dentro de un hilo, puedes utilizar JobScheduler o WorkManager para programar la ejecución periódica de la tarea. También puedes usar AlarmManager para activar un IntentService que realice la tarea. Estas opciones te permiten cambiar fácilmente la frecuencia de la tarea.
    • Para enviar notificaciones, puedes utilizar NotificationManager para mostrar la notificación y PendingIntent para manejar la interacción del usuario con la notificación.
    • En lugar de utilizar broadcasts para enviar notificaciones desde el servicio a la aplicación, puedes utilizar interfaces o callbacks para comunicarte entre el servicio y la aplicación. Esto te permite tener una forma de comunicación más estructurada y confiable.
    • Los servicios en primer plano son buenos para tareas de larga duración que requieren la atención del usuario, como reproducir música. Si tu servicio solo se encarga de mostrar notificaciones, es posible que no sea necesario que se ejecute como un servicio en primer plano. Sin embargo, si necesitas asegurarte de que el sistema no mate el servicio, entonces un servicio en primer plano es una buena opción.

Comments are closed.