0

当我按下设备上的睡眠按钮然后将其转回并“更新”时,正常运行时间会显示时间,就好像设备没有进入睡眠状态一样。

4

2 回答 2

2

uptimeMillis()以系统启动后的毫秒数计算。此时钟在系统进入深度睡眠(CPU 关闭、显示器变暗、设备等待外部输入)时停止,但不受时钟缩放、空闲或其他省电机制的影响。这是大多数间隔计时的基础,例如Thread.sleep(millls)Object.wait(millis)和 System.nanoTime()。

这个时钟保证是单调的,适用于区间不跨越设备睡眠的区间计时。大多数接受时间戳值的方法目前都需要uptimeMillis()时钟。

Thread.sleep(millis)Object.wait(millis)等标准函数始终可用。这些函数使用uptimeMillis()时钟;如果设备进入睡眠状态,剩余时间将推迟到设备唤醒。这些同步函数可能会被 Thread.interrupt() 中断,您必须处理 InterruptedException。

似乎您的手机处于空闲状态或省电状态,并且在技术上并未处于睡眠状态...

于 2014-04-04T21:15:27.203 回答
2

假设您正在谈论的按钮是“电源”或“锁定”按钮,这不一定会使设备进入深度睡眠状态。事实上,看看深度睡眠的定义(正常运行时间计数器将停止时)我认为这将是非常罕见的。手机几乎肯定会让 CPU 保持在低水平运行,以监控警报计时器和其他系统预定事件。如果您想监控手机处于“睡眠”状态的时间(屏幕关闭、手机锁定等),我怀疑您需要注册一个广播接收器并监控这些特定事件。

看看这个线程Android - 如何接收广播意图 ACTION_SCREEN_ON/OFF? 也看看电源管理器

于 2014-04-04T21:17:08.580 回答