SystemClock.uptimeMillis() не работает
Когда я нажимаю кнопку ожидания на устройстве, затем поворачиваю его назад и "обновление" показывает время работы, как если бы устройство не переходило в спящий режим.
2 ответа
Предполагая, что кнопка, о которой вы говорите, является кнопкой "питания" или "блокировки", это не обязательно переводит устройство в глубокий сон. На самом деле, глядя на определение глубокого сна (когда счетчик времени простоя остановится), я думаю, что это будет очень редко. Телефон почти наверняка будет поддерживать работоспособность центрального процессора на низком уровне для отслеживания таймеров будильника и других запланированных системных событий. Если вы хотите отслеживать, сколько времени телефон находится в "спящем" режиме (экран выключен, телефон заблокирован и т. Д.), Я подозреваю, что вам нужно зарегистрировать приемник и отслеживать эти конкретные события.
взгляните на эту ветку Android - как получить широковещательные намерения ACTION_SCREEN_ON/OFF? также взгляните на менеджера питания
uptimeMillis() подсчитывается в миллисекундах с момента загрузки системы. Эти часы останавливаются, когда система переходит в глубокий спящий режим (процессор выключен, дисплей не светится, устройство ожидает внешнего входа), но на него не влияют масштабирование часов, режим ожидания или другие механизмы энергосбережения. Это основа для большинства интервалов времени, таких как Thread.sleep (millls), Object.wait(millis) и System.nanoTime().
Эти часы гарантированно являются монотонными и подходят для интервальной синхронизации, когда интервал не охватывает режим ожидания устройства. Большинство методов, которые принимают значение метки времени, в настоящее время ожидают часы uptimeMillis().
Стандартные функции, такие как Thread.sleep(millis) и Object.wait(millis), всегда доступны. Эти функции используют часы uptimeMillis(); если устройство переходит в спящий режим, оставшаяся часть времени будет отложена до тех пор, пока устройство не проснется. Эти синхронные функции могут быть прерваны с помощью Thread.interrupt (), и вы должны обработать InterruptedException.
Похоже, ваш телефон находится в режиме ожидания или энергосбережения и технически не спит...