System.currentTimeMillis()、SystemClock.uptimeMillis() 和 SystemClock.elapsedRealtime() 区别

1、System.currentTimeMillis() 获取的是系统时间,也就是当前时刻与1970年1月1号0时0分0秒的差值,单位毫秒。可以使用 SystemClock.setCurrentTimeMillis(long millis) 进行设置。该时间可以被系统设置修改,通过监听 ACTION_TIME_TICK、ACTION_TIME_CHANGED 和 ACTION_TIMEZONE_CHANGED 这些广播 ACTION,来响应系统时间的变化。

2、SystemClock.uptimeMillis() 当前时刻与开机时刻的差值,不包括系统深度睡眠(CPU停止运行、屏幕息屏、等待外部输入),但是不会受到时钟缩放、时钟限制时间或其他节能机制的影响,单位毫秒。这个时钟是保证单调性,适用于计算同一个设备的时间间隔。

3、SystemClock.elapsedRealtime() 当前时刻与开机时刻的差值,它包含了深度睡眠时间。

几种控制机制:

(1)标准函数 Thread.sleep(millis) 和 Object.wait(millis) ,如果这两个函数使用 SystemClock.uptimeMillis() 时钟,当设备进入休眠状态时,提醒时间可能会被推迟到设备唤醒以后。并且这些同步函数可以被 Thread.interrupt() 打断。

(2)SystemClock.sleep(millis) 是一个工具函数,类似于 Thread.sleep(millis),不同的是它忽略了 InterruptedException 异常,如果你用不到 Thread.interrupt() 的话,就可以使用这个函数来延迟。

(3)Handler 可以在一个绝对或者相对的时间里同步的调度 Runnable 对象,它可以使用 SystemClock.uptimeMillis() 时钟。

(4)AlarmManager 可以设置一个定时器事件,当时间到来的时候,不管设备是否处于深度睡眠或者正在运行,事件都会发生。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容