有人能给我解释一下AlarmManager.RTC_WAKEUP和AlarmManager.ELAPSED_REALTIME_WAKEUP之间的区别吗?我已经阅读了文档,但仍然不能真正理解使用一个而不是另一个的含义。
示例代码:
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
scheduledAlarmTime,
pendingIntent);
alarmManager.set(AlarmManager.RTC_WAKEUP,
scheduledAlarmTime,
pendingIntent);这两行代码的执行有什么不同?这两行代码什么时候才能相对执行呢?
我很感谢你的帮助。
发布于 2011-05-09 22:44:15
AlarmManager.ELAPSED_REALTIME_WAKEUP类型用于从开机开始触发告警:
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 600000, pendingIntent);实际上会在设备启动后10分钟使警报从响起。
有一个计时器在设备启动时开始运行,以测量设备的正常运行时间,这是根据设备的正常运行时间触发警报的类型。
而AlarmManager.RTC_WAKEUP会根据时钟的时间触发告警。例如,如果您这样做:
long thirtySecondsFromNow = System.currentTimeMillis() + 30 * 1000;
alarmManager.set(AlarmManager.RTC_WAKEUP, thirtySecondsFromNow , pendingIntent);另一方面,这将在now 30秒后触发警报。
与AlarmManager.RTC_WAKEUP相比,AlarmManager.ELAPSED_REALTIME_WAKEUP类型很少使用。
发布于 2013-03-14 10:17:11
尽管目前已被接受并获得了更高票数的答案,但对于警报和计时,AlarmManager.ELAPSED_REALTIME*类型和SystemClock.elapsedRealtime()始终比RTC时钟更可靠。
将ELAPSED_REALTIME_WAKEUP与AlarmManager一起使用将依赖于从启动时间开始的单调时钟“,并且即使在中央处理器处于省电模式时也会继续滴答作响,因此是通用时间间隔计时的推荐基础”。所以,
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()
+ 60*1000, pendingIntent);会让你的PendingIntent在1分钟内触发(60*1000毫秒)。
然而,AlarmManager.RTC_WAKEUP表示标准的“墙”时间,以毫秒为单位。所以,
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()
+ 60*10000, pendingIntent);也可能在60秒后触发警报,但不可靠,因为如SystemClock documentation中所述
挂钟可以由用户或电话网络设置(请参阅setCurrentTimeMillis(
)),因此时间可能会不可预测地向后或向前跳跃。仅当与真实日期和时间的对应关系很重要时,才应使用此时钟,例如在日历或闹钟应用程序中。间隔或已用时间测量应使用不同的时钟。如果您正在使用System.currentTimeMillis(),请考虑收听ACTION_TIME_TICK、ACTION_TIME_CHANGED和ACTION_TIMEZONE_CHANGED意图广播,以了解时间何时发生变化。
此外,该问题仅引用了*_WAKEUP警报,但也请参阅AlarmManager文档,以确保您了解唤醒与非唤醒警报提供了什么。
发布于 2012-01-25 23:51:01
只是一张纸条。你可以得到的正常运行时间米利斯调用:
long uptimeMillis = SystemClock.elapsedRealtime();因此,如果您想在30秒后触发警报,并且想要使用正常时钟而不是正常时钟,您可以这样做:
long thirtySecondsFromNow = SystemClock.elapsedRealtime() + 30 * 1000;
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, thirtySecondsFromNow, pendingIntent);每当您想要检查某个运行时间而不是特定的日期/时间时,最好使用正常运行时间。这是因为用户在设备中设置的当前时间可以更改,如果用户使用这些设置进行更改的话。
https://stackoverflow.com/questions/5938213
复制相似问题