ScheduledExecutorService
ejecuta en su proceso de solicitud. Si el proceso de solicitud fallece, ninguna de las tareas programadas se ejecutará. De ahí la necesidad de Service
(para que su proceso dure más allá de las actividades de la 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 fue asesinado, entonces AlarmManager
puede comenzar la aplicación nuevamente (a través de PendingIntent
).
Y la última gran diferencia que nadie mencionó aquí es que AlarmManager
sabe acerca de WakeLock
sy la administración de energía. Esto significa que AlarmManager
puede activar el dispositivo Android a la hora especificada para ejecutar la tarea programada. Mientras que ScheduledExecutorService
no sabe nada sobre la administración de energía y solo comenzará la tarea cuando el dispositivo no esté en modo de suspensión (es decir, simplemente puede perder la hora).
¿Hay algo más que funcione cuando el dispositivo está en sueño profundo ... Intenté Handler, Runnable Threads, nada funciona en modo de suspensión profunda. – DAC84