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关闭,屏幕关闭)也不会停止,适用于需要跨越多个休眠周期的计时。