Влияние батареи: Фоновая служба +BroadcastReceiver VS Опрос каждую минуту с AlarmManager?
Я пишу приложение, которое должно определить, когда экран включается или выключается из фона (с точностью около 1 минуты). В идеале я бы просто статически зарегистрировался для Intent.ACTION_SCREEN_ON и Intent.ACTION_SCREEN_OFF, но, к сожалению, это не разрешено.
Это оставляет меня с двумя не очень хорошими - на самом деле - довольно ужасными вариантами (если я не знаю, что вполне вероятно):
- Запустите вездесущий Service + BroadcastReceiver, который регистрируется для намерений ACTION_SCREEN_ON и OFF ИЛИ
- Используйте AlarmManager, чтобы запланировать выполнение кода каждую минуту, и проверьте, включено ли отображение с помощью isInteractive ()
# 1 не велик, потому что его можно убить, он тратит память, его нужно запускать при загрузке, которая не работает при установке на SD-карту и т. Д., Список можно продолжить.
№ 2 не велик, потому что он менее точен и... давайте посмотрим правде в глаза - опрос почти никогда не является правильным ответом
Но что хуже всего, они оба будут иметь негативное влияние на срок службы батареи. Это на самом деле самый важный фактор ИМХО.
TL; DR
Какое из двух зол меньше всего влияет на время автономной работы?
1 ответ
Я не разработчик Android (но это было бы весело), но при чтении обзора класса AlarmManager, он говорит, что он будет периодически запускать приложение, если оно еще не запущено. Это не опрос, так как код не работает и не влияет на производительность или не дает процессору спать (потребляя энергию). Я уверен, что сам класс AlarmManager тоже не опрашивает.
Вместо этого вы можете посмотреть на приостановку процесса ваших приложений и периодически его пробуждать. Запуск процесса обычно является дорогостоящей операцией. Хотя приостановка приложения не потребляет ресурсы процессора (и, следовательно, влияет на энергопотребление), она все же занимает мало места.