Android中3种时间获取方法的差异

来源:互联网 发布:全身美白经验知乎 编辑:程序博客网 时间:2024/06/04 00:58
 在android.os.SystemClock这个类中,文档详细的阐述了3种方法的差异和适用范围。 

1.System.currentTimeMillis()

像一个标准的挂钟("wall" clock)一样(时间和日期)描述了自从世界协调时间1970年1月1日0:00到现在的时间差,以毫秒为单位计算。

但是这个时间可以通过用户或电话的网络来修改(可以使用setCurrentTimeMillis(long)来修改),因此这个时间就变得不可预测。

所以通常情况下,我们应该在与真实世界相关的地方使用这个时间。例如日历或者闹钟,而内部时间或者计算流逝掉的时间应该采用不同的方法。如果非要用System.currentTimeMillis(),那么应该设置一个监听器来监听 ACTION_TIME_TICK, ACTION_TIME_CHANGED 和 ACTION_TIMEZONE_CHANGED 这三个Intent广播,当时间发生改变的时候。


2.uptimeMillis() 

 从系统启动之后开始即时,当系统进入深度休眠(如CPU关闭,屏幕关闭,设备等待外部输入)的时候停止。不会受到时钟调整,空闲,或者其他节能机制的影响。这个方法是大多数内部计时的基础。如Thread.sleep(millis), Object.wait(millis) 和 System.nanoTime()。这个计时器保证不会发生变化。

对于用户界面事件,和相关的处理,推荐采用这个计时器。


3.elapsedRealtime() 

从系统启动之后一直运行,即使进入深度休眠(CPU关闭,屏幕关闭)也不会停止,适用于需要跨越多个休眠周期的计时。

0 0