Ответ 1
Устройство спит, когда не работает приложение, которое мешает ему спать. Так: 1. Экран выключен (в то время как на нем всегда есть какое-то запущенное приложение, например Launcher) 2. Отсутствует работающий сервис (например, музыка, загрузка) - нет блокировок ЦП.
AlarmManager просыпается от сна, запускает то, что нужно запустить. Это важно, например. для завершения службы, которая была создана в широковещательном приемнике от тревоги, чтобы устройство снова заснуло. Если вы делаете больше и важнее в фоновом режиме, вы должны приобрести блокировку процессора для своего приложения, чтобы предотвратить его урон от ОС Android.
Что именно вы подразумеваете под "Как проверить, с какого времени команда больше не выполняется"? Какая команда?
Из JavaDoc:
Зарегистрированные тревоги сохраняются во время устройство спит (и может при необходимости разбудите устройство, если они уйти в это время), но будет очищается, если он выключен и перезагружена.
Таким образом, ОС удерживает все сигналы тревоги, устройство может быть пробуждено сигналом тревоги, который идет во время сна. После перезагрузки будильники удаляются (вы должны хранить их в БД и восстанавливать после перезагрузки).
"Есть ли способ увидеть из вывода logcat, когда устройство начинает спать?" Поскольку я знаю, что нет, я могу видеть только это, когда экран выключается:
*** set_screen_state 0
из тега "power"
ИМХО, вы не должны беспокоиться о спящем режиме, просто сделайте свое приложение "хорошим гражданином Android", если нужно, выключите и заработайте экран (Intent.ACTION_SCREEN_OFF), завершая службы ASAP, освобождая ресурсы (сеть, GPS, CPU) КАК МОЖНО СКОРЕЕ, используя неточные сигналы тревоги, менеджер загрузки и весь хороший персонал, приведённый ОС. Я считаю, что Android обрабатывает процессор спящим прозрачно.