Intereting Posts
Есть ли способ использовать функции Java 8 с проектом библиотеки Android? Сообщения XMPP, потерянные на Android при переключении передачи данных (например, включение Wi-Fi, GSM <-> Wifi-переключатель) ViewPager + SurfaceView = длительная задержка при переходе к активности Перечислять / Итерировать все представления в действии? Невозможно запустить приложение из фона на устройствах Xiaomi до тех пор, пока «Автозапуск» не будет включен вручную Перезагрузка Android AsyncTask У Android действительно нет wchar_t? Как использовать набор пользовательского интерфейса (PSD) в приложении для Android Галерея Android – Замена растрового изображения в ImageView после прокрутки Как писать на границе текста редактирования Как показать случайные изображения на Android? SetTabSFromPagerAdapter устарел Как применять легкую тему для активности и сохранять темную тему для диалогов одновременно? Как правильно очистить данные о намерениях от SingleTop Activity? «Оптимизация» доступа к курсорам в Android: позиции и имена столбцов

Будет ли обработчик 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.