Какое определение для sleep для устройства Android?

я использую

alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, 0, DURATION, broadcast);

Чтобы запланировать повторяющуюся задачу, которая должна выполняться только в том случае, если устройство не находится в спящем режиме. Насколько я понимаю, API в AlarmManager цель будет вызываться после выхода устройства из спящего режима.

Теперь, когда Android-устройство спит? Для тестирования я установил продолжительность на две минуты и подключил устройство к своей машине. Теперь я смотрю logcat, и каждые две минуты он выдает мое отладочное сообщение.

Я всегда думал, что деактивированный экран означает, что устройства начинают спать. Или мой взгляд на вывод отладки мешает устройству спать? Я также отключил USB-соединение и посмотрел журнал через полчаса, и я мог видеть вызов моего кода таймера, даже если дисплей был темным более 15 минут.

Как я могу проверить, с какого времени команда больше не выполняется и на что ссылается спящий в документации AlarmManager? Есть ли способ увидеть на выходе logcat, когда устройство начало спать?


person Janusz    schedule 25.02.2011    source источник


Ответы (2)


Устройство находится в спящем режиме, когда не запущено приложение, препятствующее его переходу в спящий режим. Итак: 1. Экран выключен (пока он включен, всегда есть какое-то запущенное приложение, например, Launcher) 2. Нет запущенных служб (например, музыки, загрузок) - нет блокировки процессора.

AlarmManager выводит устройство из спящего режима, запускает то, что должно быть запущено. Это критично, например. чтобы завершить службу, созданную в широковещательном приемнике из будильника, чтобы устройство снова заснуло. Если вы делаете что-то более длительное и важное в фоновом режиме, вам следует установить блокировку ЦП для вашего приложения, чтобы предотвратить его уничтожение ОС Android.

Что именно вы подразумеваете под «Как я могу проверить, с какого времени команда больше не выполняется»? Какая команда?

Из JavaDoc:

Зарегистрированные будильники сохраняются, пока устройство находится в спящем режиме (и могут дополнительно разбудить устройство, если они сработают в это время), но будут удалены, если оно будет выключено и перезагружено.

Таким образом, ОС удерживает все будильники, устройство может быть разбужено будильником, который срабатывает, пока он спит. Аварийные сигналы сбрасываются после перезагрузки (вы должны сохранить их в БД и восстановить после перезагрузки).

«Есть ли способ увидеть по выходным данным logcat, когда устройство перешло в спящий режим?» Насколько я знаю, этого нет, я могу видеть что-то подобное только тогда, когда экран гаснет:

*** set_screen_state 0 из тега "сила"

ИМХО, вам не следует беспокоиться о спящем режиме, просто сделайте свое приложение «хорошим гражданином Android», обрабатывая намерения выключения и включения экрана (Intent.ACTION_SCREEN_OFF), если это необходимо, заканчивая службы как можно скорее, освобождая ресурсы (сеть, GPS, ЦП) как можно скорее, используя неточные будильники, менеджер загрузок и все хорошее, что приносит ОС. Я считаю, что Android прозрачно обрабатывает спящий режим процессора.

person Krzysztof Wolny    schedule 01.03.2011

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

В зависимости от версии Android на вашем устройстве вы можете найти диаграмму времени бодрствования в меню «Настройки» -> «О телефоне» -> «Использование батареи» -> «Нажмите на график вверху». Дополнительную информацию о блокировках пробуждения можно найти по адресу http://developer.android.com/reference/android/os/PowerManager.html

person Mike dg    schedule 28.02.2011