public final class SystemClock
extends Object
java.lang.Object | |
↳ | android.os.SystemClock |
核心计时设施。
有三种不同的时钟可供使用,不应混淆:
System.currentTimeMillis()
是自时代以来毫秒级的标准“墙”时钟(时间和日期)。 挂钟可以由用户或电话网络设置(请参阅setCurrentTimeMillis(long)
),因此时间可能会跳转或不可预测地转发。 只有在与真实世界日期和时间的对应很重要时才能使用此时钟,例如在日历或闹钟应用程序中。 间隔或经过时间测量应使用不同的时钟。 如果您正在使用System.currentTimeMillis的(),考虑听ACTION_TIME_TICK
, ACTION_TIME_CHANGED
和ACTION_TIMEZONE_CHANGED
Intent
广播找出时间的变化时。
系统启动后,以毫秒为单位计算uptimeMillis()
。 当系统进入深度睡眠(CPU关闭,显示黑暗,设备等待外部输入)时,此时钟停止,但不受时钟缩放,空闲或其他节能机制的影响。 这对于大多数间隔定时,如基础Thread.sleep(millls)
, Object.wait(millis)
,和System.nanoTime()
。 这个时钟保证是单调的,并且当间隔不跨越设备睡眠时适用于间隔定时。 接受时间戳值的大多数方法当前期望uptimeMillis()
时钟。
elapsedRealtime()
和elapsedRealtimeNanos()
返回系统启动以来的时间,并包含深度睡眠。 这个时钟保证是单调的,即使在CPU处于省电模式时也会继续保持时钟状态,所以是通用间隔时序的推荐基础。
标准功能如Thread.sleep(millis)
和Object.wait(millis)
始终可用。 这些功能使用uptimeMillis()
时钟; 如果设备进入睡眠状态,剩下的时间将被推迟,直到设备被唤醒。 这些同步功能可能会中断Thread.interrupt()
,并且您必须处理InterruptedException
。
SystemClock.sleep(millis)
是一个实用的功能非常相似, Thread.sleep(millis)
,但是却忽略了InterruptedException
。 如果您不使用Thread.interrupt()
,请使用此功能延迟,因为它会保留线程的中断状态。
Handler
类可以在绝对或相对时间安排异步回调。 处理程序对象也使用uptimeMillis()
时钟,并且需要event loop
(通常出现在任何GUI应用程序中)。
即使设备处于深度睡眠或应用程序未运行, AlarmManager
也会触发一次或重复发生的事件。 可以选择currentTimeMillis()
(RTC)或elapsedRealtime()
(ELAPSED_REALTIME)来安排事件,并在发生广播时进行Intent
广播。
Public methods |
|
---|---|
static long |
currentThreadTimeMillis() 返回当前线程中运行的毫秒数。 |
static long |
elapsedRealtime() 返回启动后的毫秒数,包括睡眠时间。 |
static long |
elapsedRealtimeNanos() 自启动后返回纳秒,包括睡眠时间。 |
static boolean |
setCurrentTimeMillis(long millis) 设置当前墙壁时间(以毫秒为单位)。 |
static void |
sleep(long ms) 在返回之前等待给定的毫秒数(uptimeMillis)。 |
static long |
uptimeMillis() 从启动后返回毫秒,不包括在深度睡眠中花费的时间。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
long currentThreadTimeMillis ()
返回当前线程中运行的毫秒数。
Returns | |
---|---|
long |
elapsed milliseconds in the thread |
long elapsedRealtime ()
返回启动后的毫秒数,包括睡眠时间。
Returns | |
---|---|
long |
elapsed milliseconds since boot. |
long elapsedRealtimeNanos ()
自启动后返回纳秒,包括睡眠时间。
Returns | |
---|---|
long |
elapsed nanoseconds since boot. |
boolean setCurrentTimeMillis (long millis)
设置当前墙壁时间(以毫秒为单位)。 需要调用进程具有适当的权限。
Parameters | |
---|---|
millis |
long
|
Returns | |
---|---|
boolean |
if the clock was successfully set to the specified time. |
void sleep (long ms)
在返回之前等待给定的毫秒数(uptimeMillis)。 类似于sleep(long)
,但不扔InterruptedException
; interrupt()
事件推迟到下一个可中断操作。 直到至少达到指定的毫秒数才会返回。
Parameters | |
---|---|
ms |
long : to sleep before returning, in milliseconds of uptime. |
long uptimeMillis ()
从启动后返回毫秒,不包括在深度睡眠中花费的时间。
Returns | |
---|---|
long |
milliseconds of non-sleep uptime since boot. |