当我按下设备上的睡眠按钮然后将其转回并“更新”时,正常运行时间会显示时间,就好像设备没有进入睡眠状态一样。
2 回答
uptimeMillis()以系统启动后的毫秒数计算。此时钟在系统进入深度睡眠(CPU 关闭、显示器变暗、设备等待外部输入)时停止,但不受时钟缩放、空闲或其他省电机制的影响。这是大多数间隔计时的基础,例如Thread.sleep(millls)、Object.wait(millis)和 System.nanoTime()。
这个时钟保证是单调的,适用于区间不跨越设备睡眠的区间计时。大多数接受时间戳值的方法目前都需要uptimeMillis()时钟。
Thread.sleep(millis)和Object.wait(millis)等标准函数始终可用。这些函数使用uptimeMillis()时钟;如果设备进入睡眠状态,剩余时间将推迟到设备唤醒。这些同步函数可能会被 Thread.interrupt() 中断,您必须处理 InterruptedException。
似乎您的手机处于空闲状态或省电状态,并且在技术上并未处于睡眠状态...
假设您正在谈论的按钮是“电源”或“锁定”按钮,这不一定会使设备进入深度睡眠状态。事实上,看看深度睡眠的定义(正常运行时间计数器将停止时)我认为这将是非常罕见的。手机几乎肯定会让 CPU 保持在低水平运行,以监控警报计时器和其他系统预定事件。如果您想监控手机处于“睡眠”状态的时间(屏幕关闭、手机锁定等),我怀疑您需要注册一个广播接收器并监控这些特定事件。