Будет ли обработчик PostDelayed не запускаться, когда процессор спит?

У меня есть активность с некоторыми Handlers , которые выполняются с интервалами не более 5 минут. Эта активность запускается из BroadcastReceiver и может быть запущена с выключенным экраном, ожидая, когда пользователь возьмет телефон и получит вход пользователя, когда это произойдет, активность onPause() вызывается так, что CPU находится в спящем режиме. Я не активировал активность, чтобы включить экран, потому что я хочу сохранить как можно больше батареи.

Я тестировал его с помощью своего телефона и работал очень хорошо, а экран отключен от всех Handlers выполняющих весь код, который им нужно выполнить. Если я включаю и выключаю экран, пока активность открыта, все работает нормально.

Теперь я читал везде, что некоторые устройства работают не так, как ожидалось, когда экран отключается, а процессор спит, в большинстве случаев – с акселерометрами. Теперь мой вопрос: мне нужно приобрести WakeLock чтобы процессор не спал, пока моя активность открыта? Я действительно хочу это знать, потому что, как я уже говорил, я не хочу «растрачивать» батарею, приобретая дорогой WakeLock .

Я бы предпочел подробный ответ человека, который действительно знает, как это работает.

Ваш подход не может быть стабильно достигнут вашим подходом. Если вы используете метод postDelayed() обработчика Handler, и процессор переходит в глубокий режим, счетчик ms останавливается и будет продолжаться, только если процессор снова проснется.

См. Это более подробно.

Поэтому, если вы хотите иметь какую-то работу cron, вам нужно будет использовать wakelock. К счастью, есть реализация Service, которая делает именно это: Wakeful IntentService

Из документа:

Рекомендуемая модель для эквивалентов Android для заданий cron и запланированных задач Windows – использовать AlarmManager. Это хорошо работает в сочетании с IntentService, поскольку служба будет выполнять свою работу в фоновом потоке и закрываться, когда больше не будет работы. Есть одна небольшая проблема: IntentService ничего не делает, чтобы устройство не спало. Если сигнал тревоги был вариантом WAKEUP, телефон будет бодрствовать сам по себе, а BroadcastReceiver, обрабатывающий сигнал тревоги, находится в методе onReceive (). В противном случае телефон может заснуть. WakefulIntentService пытается бороться с этим, объединяя легкость IntentService с частичным WakeLock.