Разница между AlarmManager и ScheduledExecutorService
Помимо настройки и точного времени (то есть полуночи) по сравнению с установкой задержки (т.е. 24 часа), какая разница между использованием AlarmManager
и ScheduledExecutorService
для периодической работы задачи?
В моем случае мне нужно запустить немного кода для проверки новых данных каждую ночь и создать новое уведомление, если есть новые данные.
Спасибо!
Ответы
Ответ 1
ScheduledExecutorService
выполняется в вашем приложении. Если процесс приложения завершится, ни одна из запланированных задач не будет запущена. Следовательно, потребность в Service
(поэтому ваш процесс живет за пределами активной части жизненного цикла).
Хотя AlarmManager
является критическим системным сервисом, который работает все время. И если ваше приложение запланировало что-то и было убито, то AlarmManager
может снова запустить приложение (через PendingIntent
).
И последнее существенное отличие, о котором никто не упоминал, заключается в том, что AlarmManager
знает о WakeLock
и управлении питанием. Это означает, что AlarmManager
может запустить Android-устройство в указанное время для запуска запланированной задачи. Пока ScheduledExecutorService
ничего не знает об управлении питанием и только запускает задачу, когда устройство не находится в глубоком сне (т.е. Может просто пропустить время).
Ответ 2
ScheduledExecutorService
будет работать, только если у вас есть какой-то компонент, например Service
, который работает все время. Следовательно, его следует использовать только в тех случаях, когда компонент будет в памяти по другим причинам, добавляя ценность пользователю. Наличие компонента в памяти исключительно для наблюдения за тиканием часов является расточительным и одной из причин, почему пользователи атакуют разработчиков с убийцами задач и т.д.
AlarmManager
- это системная служба, предоставляемая ОС. Он может запускать компонент, когда время перекатывается. Следовательно, вам не нужно, чтобы выполнялся компонент.
В моем случае мне нужно запустить немного кода для проверки новых данных каждую ночь и создать новое уведомление, если есть новые данные.
Это явный сценарий для AlarmManager
.
Ответ 3
Я думаю, что ScheduledExecutorService
привязан к вашему процессу и не будет работать, если ваш процесс будет убит. Напротив, AlarmManager
управляется ОС, поэтому работает, даже если ваше приложение не работает.