在做安卓定时功能时,常会对currentTimeMillis() 与 elapsedRealtime() 获取的当前时间毫秒产生疑问
currentTimeMillis()
1 | System.currentTimeMillis() ; |
获取到的是一个标准的“墙”时钟(时间和日期),表示从纪元到现在的毫秒数。也就是从1970年1月1日到现在所经历的毫秒数。
elapsedRealtime()
1 | SystemClock.elapsedRealtime(); |
获取到 系统启动到现在的时间,包含设备深度休眠的时间。该时钟被保证是单调的,即使CPU在省电模式下,该时间也会继续计时。该时钟可以被使用在当测量时间间隔可能跨越系统睡眠的时间段。
AlarmManager 定时针对以上两种计时标准
AlarmManager 设置定时的方法针对 android 不同版本 有不同的 set 函数。
1 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {// 6.0 |
以下统一用 set函数 来说明
使用 currentTimeMillis()计时
需要 set()
中的 type 使用
1 | AlarmManager.RTC_WAKEUP |
使用 elapsedRealtime()计时
需要 set()
中的 type 使用
1 | AlarmManager.ELAPSED_REALTIME_WAKEUP |
总结
计时的标准选择并不是绝对的,根据实际开发情况,选择合适恰当的计时标准。