System.currentTimeMillis() uptimeMillis() elapsedRealtime() 区别

System.currentTimeMillis() 系统时间,也就是日期时间,可以被系统设置修改,然后值就会发生跳变。
uptimeMillis 自开机后,经过的时间,不包括深度睡眠的时间
elapsedRealtime自开机后,经过的时间,包括深度睡眠的时间

所以System.currentTimeMillis()不适合计算时间间隔,eg,
now = System.currentTimeMillis()
//do something...
duration = System.currentTimeMillis() -now;

如果在do something的时候,改变了系统时间,那么 获取duration就不准了。通常在比较小的时间里,(毫秒级,秒级)一般不会有什么问题,系统时间可能不会改变。但是如果时间很长的话,那就保证不了了

uptimeMillis由于不计算睡眠时间,所以非常适合做一些特殊的时间间隔计算
elapsedRealtime 包括睡眠时间,适用于任何情况下的时间间隔计算

你可能感兴趣的:(System.currentTimeMillis() uptimeMillis() elapsedRealtime() 区别)