Intereting Posts
Есть ли способ компактной памяти в андроиде, чтобы снизить знак высокой воды? Возможно ли запустить Chromium Browser на Android? Диалоговое окно datepicker не может использовать swinner для устройства Android 7.0 Does android: scaleType = "fitCenter" работает только с атрибутами Layout_width и Layout_height? Как пользовательское представление может получить доступ к своей деятельности? DrawerLayout.openDrawer не работает в первый раз Android getLine1Number () возвращает пустую строку Apache Cordova Facebook Plugin Fail On Init – Android Попытайтесь повторно открыть уже закрытый объект: java.lang.IllegalStateException :? Как определить возможности аудио на Android? Получить идентификатор Google, используемый для загрузки приложения Как вернуться к конкретному действию, если действия выполняются одним классом Простой пример сетки Android, использующий RecyclerView с GridLayoutManager (например, старый GridView) Android – Подтвердите выход приложения с помощью тоста Android.util.AndroidRuntimeException: вы не можете комбинировать удаление салфетки и панель действий

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

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

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

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

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

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

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

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

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

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

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