我想知道RTC、RTC_WAKEUP、ELAPSED_REALTIME、ELAPSED_REALTIME_WAKEUP之间的区别。
我想编写一个警报应用程序,我将在其中设置警报并关闭我的应用程序并期望在设置的时间发出警报。
会有多个警报。现在我正在为模拟器编写,但稍后将在设备上进行测试。在模拟器中,一旦我设置了警报并关闭模拟器并重新启动它,它就会被清除,正如我在 RTC、RTC_WAKEUP 和 ELAPSED_REALTIME 中发现的那样。我很困惑。我应该使用 ELAPSED_REALTIME_WAKEUP 吗?我还没有看到任何使用 ELAPSED_REALTIME_WAKEUP 的教程。请解释。谢谢。
4 回答
ELAPSED_REALTIME
SystemClock.elapsedRealtime() 中的闹钟时间(自启动以来的时间,包括睡眠)。此警报不会唤醒设备;如果它在设备睡眠时熄灭,则直到设备下次唤醒时才会发送。
ELAPSED_REALTIME_WAKEUP
SystemClock.elapsedRealtime() 中的闹钟时间(自启动以来的时间,包括睡眠),它将在设备关闭时唤醒设备。
实时时钟
System.currentTimeMillis() 中的闹钟时间(UTC 挂钟时间)。此警报不会唤醒设备;如果它在设备睡眠时熄灭,则直到设备下次唤醒时才会发送。
RTC_WAKEUP
System.currentTimeMillis() 中的闹钟时间(UTC 挂钟时间),它会在设备关闭时唤醒设备。
警报类型:
- ELAPSED_REALTIME – 在设备启动后指定的时间长度后触发挂起的意图。如果设备处于睡眠状态,它会在设备下次唤醒时触发。
- ELAPSED_REALTIME_WAKEUP – 在设备启动后指定的时间长度后触发挂起的意图。如果设备处于睡眠状态,它会唤醒设备。
- RTC – 在指定时间触发未决意图。如果设备处于睡眠状态,则直到设备下次唤醒时才会交付。
- RTC_WAKEUP – 在指定时间触发未决意图,如果设备处于睡眠状态,则唤醒设备。
闹钟有两种通用时钟类型:“经过的实时”和“实时时钟”(RTC)。经过的实时使用“系统启动后的时间”作为参考,实时时钟使用 UTC(挂钟)时间。这意味着经过的实时时间适合于根据时间的流逝设置警报(例如,每 30 秒触发一次的警报),因为它不受时区/区域设置的影响。实时时钟类型更适合依赖于当前语言环境的警报。
来源:https ://developer.android.com/training/scheduling/alarms.html
从网站你可以得到 4 常数之间的区别 下面是设置警报的示例
Calendar mCalendar = Calendar.getInstance();
mCalendar.add(Calendar.SECOND, 20);
Intent intent_Timer = new Intent(TimerEvents.this, AlarmReceiver.class);
intent_Timer.putExtra("alarm_message", "Drax Rules!!!");
// In reality, you would want to have a static variable for the request
// code instead of 192837
PendingIntent sender = PendingIntent.getBroadcast(this, 192837,
intent_Timer, PendingIntent.FLAG_UPDATE_CURRENT);
// Get the AlarmManager service
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, mCalendar.getTimeInMillis(), sender);
希望这对你有帮助