SystemClock.uptimeMillis()不起作用

时间:2014-04-04 21:08:28

标签: android system-clock

当我按下设备上的睡眠按钮然后将其转回并更新"正常运行时间表示设备没有进入睡眠状态的时间。

2 个答案:

答案 0 :(得分:2)

自引导系统以来,

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

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

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

好像你的手机处于闲置状态或节电状态,而且技术上没有睡觉......

答案 1 :(得分:2)

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

看一下这个帖子Android - how to receive broadcast intents ACTION_SCREEN_ON/OFF? 另请查看power manager