SystemClock实现核心计时功能
有三钟不同的时钟:
| 方法 | 说明 |
|---|---|
| System.currentTimeMillis(): | 标准挂钟(wall clock)(日期和时间)表示的毫秒级的纪元(epoch). 挂钟时间可以由用户或手机网络设置(见setCurrentTimeMillis),因此时间可以向前或向后不可预测的调整.当现实世界的日期和时间是非常重要的,应该使用此时间,如日历或闹钟应用.而间隔或耗时测量应该使用不同的时钟.如果使用System.currentTimeMillis(),则应考虑监听Intent(ACTION_TIME_TICK,ACTION_TIME_CHANGED,ACTION_TIMEZONE_CHANGED)广播,去得知时间改变 |
| uptimeMillis(): | 系统启动后,按毫秒计算的时间. 此时间停止,当系统进入深度睡眠(CPU off,显示变黑,设备等待外部输入)时,但是不影响时钟,空闲,和其他省电机制. 这是许多间隔时间的基础,如Thread.sleep(millis),Object.wait(millis),System.nanoTime().此时钟保证是单调递增的, 适用于间隔时间,当间隔时间不类计算设备睡眠时. |
| elapsedRealtime(): | 返回从系统启动开始计时的时间,包含深度睡眠.此时钟保证是单调递增的,即使CPU在省电模式下,也继续跳动,因此通用的时间间隔推荐以此为基础. |
SystemClock函数
| 函数 | 说明 |
|---|---|
| sleep | 在返回前,等待给定时间.运行中间不会被InterruptedException打断,直到超时.如果中间有被打断,退出时会重打断 |
| setCurrentTimeMillis | 设置当前的挂钟时间(wall time),毫秒级. 要求调用进程有合适的权限.返回设置是否成功 |
| uptimeMillis | 返回启动后的运行时间(毫秒级),不包含深度睡眠时间 |
| elapsedRealtime | 返回启动后的运行时间(毫秒级),包含深度睡眠时间 |
| elapsedRealtimeNanos | 返回启动后的运行时间(纳秒级),包含深度睡眠时间 |
| currentThreadTimeMillis | 返回当前线程运行的毫秒数 |
| currentThreadTimeMicro | 返回当前线程运行的微秒数 |
| currentTimeMicro | 返回当前的挂钟时间(wall time)(微秒级) |
本文详细介绍了SystemClock中的三种不同类型的时钟:wallclock时间(System.currentTimeMillis())、uptimeMillis()和elapsedRealtime()。wallclock时间用于表示现实世界的时间,uptimeMillis()记录了系统启动以来的时间(不包括深度睡眠),而elapsedRealtime()则包含了系统的深度睡眠时间。

被折叠的 条评论
为什么被折叠?



