Diferencia entre AlarmManager y ScheduledExecutorService

Además de configurar y la hora exacta (es decir, la medianoche) frente a la configuración de un retraso (es decir, 24 horas), ¿cuál es la diferencia entre usar AlarmManager y ScheduledExecutorService para ejecutar una tarea periódicamente?

En mi caso, necesito ejecutar un poco de código para verificar nuevos datos cada noche y crear una nueva notificación si hay nuevos datos.

¡Gracias!

ScheduledExecutorService ejecuta en su proceso de solicitud. Si el proceso de solicitud fallece, ninguna de las tareas progtwigdas se ejecutará. De ahí la necesidad de Service (para que su proceso viva más allá de las Actividades, parte activa del ciclo de vida).

Mientras que AlarmManager es un servicio de sistema crítico que se ejecuta todo el tiempo. Y si su aplicación programó algo y se AlarmManager , entonces AlarmManager puede iniciar la aplicación nuevamente (a través de PendingIntent ).

Y la última gran diferencia que nadie mencionó aquí es que AlarmManager conoce la administración de energía y WakeLock . Esto significa que AlarmManager puede reactivar el dispositivo Android a la hora especificada para ejecutar la tarea progtwigda. Si bien ScheduledExecutorService no sabe nada acerca de la administración de energía, solo iniciará la tarea cuando el dispositivo no esté en modo de suspensión (es decir, simplemente puede perder la hora).

ScheduledExecutorService solo funcionará si tiene algún componente, como un Service , ejecutándose todo el tiempo. Por lo tanto, solo se debe usar en los casos en que el componente estaría en la memoria por otros motivos, agregando valor al usuario. Tener un componente en la memoria únicamente para ver cómo funciona el reloj es un desperdicio y una de las razones por las que los usuarios atacan a los desarrolladores con asesinos de tareas y cosas así.

AlarmManager es un servicio de sistema provisto por OS. Puede poner en marcha un componente cuando el tiempo llegue. Por lo tanto, no necesita tener el componente en ejecución.

En mi caso, necesito ejecutar un poco de código para verificar nuevos datos cada noche y crear una nueva notificación si hay nuevos datos.

Este es un escenario claro para AlarmManager .

Creo que ScheduledExecutorService está vinculado a su proceso y no funcionará en caso de que su proceso sea asesinado. Por el contrario, AlarmManager es administrado por el sistema operativo, por lo que funciona incluso si su aplicación no se está ejecutando.