Разница между AlarmManager и ScheduledExecutorService

Помимо настройки и точного времени (то есть полуночи) по сравнению с установкой задержки (т.е. 24 часа), какая разница между использованием AlarmManager и ScheduledExecutorService для периодической работы задачи?

В моем случае мне нужно запустить немного кода для проверки новых данных каждую ночь и создать новое уведомление, если есть новые данные.

Спасибо!

Ответы

Ответ 1

ScheduledExecutorService выполняется в вашем приложении. Если процесс приложения завершится, ни одна из запланированных задач не будет запущена. Следовательно, потребность в Service (поэтому ваш процесс живет за пределами активной части жизненного цикла).

Хотя AlarmManager является критическим системным сервисом, который работает все время. И если ваше приложение запланировало что-то и было убито, то AlarmManager может снова запустить приложение (через PendingIntent).

И последнее существенное отличие, о котором никто не упоминал, заключается в том, что AlarmManager знает о WakeLock и управлении питанием. Это означает, что AlarmManager может запустить Android-устройство в указанное время для запуска запланированной задачи. Пока ScheduledExecutorService ничего не знает об управлении питанием и только запускает задачу, когда устройство не находится в глубоком сне (т.е. Может просто пропустить время).

Ответ 2

ScheduledExecutorService будет работать, только если у вас есть какой-то компонент, например Service, который работает все время. Следовательно, его следует использовать только в тех случаях, когда компонент будет в памяти по другим причинам, добавляя ценность пользователю. Наличие компонента в памяти исключительно для наблюдения за тиканием часов является расточительным и одной из причин, почему пользователи атакуют разработчиков с убийцами задач и т.д.

AlarmManager - это системная служба, предоставляемая ОС. Он может запускать компонент, когда время перекатывается. Следовательно, вам не нужно, чтобы выполнялся компонент.

В моем случае мне нужно запустить немного кода для проверки новых данных каждую ночь и создать новое уведомление, если есть новые данные.

Это явный сценарий для AlarmManager.

Ответ 3

Я думаю, что ScheduledExecutorService привязан к вашему процессу и не будет работать, если ваш процесс будет убит. Напротив, AlarmManager управляется ОС, поэтому работает, даже если ваше приложение не работает.