Intereting Posts
Откройте PopupWindow и дайте внешним пользователям по-прежнему ощутить Почему мой аккаунт под названием facebook android sdk называется два раза? Отклонить вызов программно без кольца Платформы Android: как избежать вложенных весов? Скрыть TextView через некоторое время в Android SurfaceTexture.OnFrameAvailableListener перестает быть вызванным Синхронизация контактов с моим собственным приложением, например skype или whatsapp Как получить объект из списка в setOnItemClickListener в android? Tabhost – установить положение значка на вкладках Android Android – распаковать папку? Мера, макет и время рисования в Hierarchyviewer API-ключ для GCM неожиданно недействителен? Несанкционированная ошибка (401) Использование Guice для встраивания зависимостей в конструктор активности Android Android: передача параметров между классами Как обрабатывать разницу в часовых поясах между сервером и встроенным приложением для Android?

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