Intereting Posts
Пользовательский жест, необходимый для начала воспроизведения в Android-плеере HTML5 Android: прослушиватель изменений подключения к Интернету Android: Appcompat 21 как добавить тень на панель действий Можно ли показывать индикатор выполнения при загрузке изображения через Retrofit 2 Провайдер содержимого не синхронизируется с SqliteDatabase Вложенные фрагменты – IllegalStateException "Не удается выполнить это действие после onSaveInstanceState" Как проверить, что произойдет, когда вы опубликуете обновление для своего приложения на Market Должен ли полный файл xml содержимого резервной копии быть пустым или вообще не добавлять, чтобы включить все? Android: Какую осторожность следует использовать при использовании свойства setTag () View? Загрузка ресурсов изображения в виде RGB 565 Android Listview с разделами Ошибка Crosswalk для сборки android в проекте cordova Libav для Android Android: что делать с типом MIME приложения / smil Меню Android Options без ActionBar?

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