Android Alarm AlarmManager提供的四种类型的警报和何时使用什么有什么区别?

时间:2011-02-24 08:23:38

标签: android alarm

我想知道 RTC,RTC_WAKEUP,ELAPSED_REALTIME,ELAPSED_REALTIME_WAKEUP 之间的区别。
我想编写一个警报应用程序,我将设置警报并关闭我的应用程序,并期望在设置的时间内发出警报 会有多个警报。现在我正在为模拟器编写,但稍后将在设备上进行测试。在模拟器中,一旦我设置了警报并关闭模拟器并重新启动它,那么它将被清除,正如我在RTC,RTC_WAKEUP和ELAPSED_REALTIME中找到的那样。我很迷惑。我应该使用ELAPSED_REALTIME_WAKEUP吗?我还没有看到任何使用ELAPSED_REALTIME_WAKEUP的教程。 请解释。 感谢。

5 个答案:

答案 0 :(得分:17)

ELAPSED_REALTIME

SystemClock.elapsedRealtime()中的闹钟时间(自启动以来的时间,包括睡眠)。此警报不会唤醒设备;如果它在设备处于睡眠状态时熄灭,则在下次设备唤醒时才会发送。

ELAPSED_REALTIME_WAKEUP

SystemClock.elapsedRealtime()中的闹钟时间(启动后的时间,包括睡眠时间),它将在设备关闭时唤醒设备。

RTC

System.currentTimeMillis()中的闹钟时间(以UTC为单位的挂钟时间)。此警报不会唤醒设备;如果它在设备处于睡眠状态时熄灭,则在下次设备唤醒时才会发送。

RTC_WAKEUP

System.currentTimeMillis()中的闹钟时间(以UTC为挂钟时间),它将在设备关闭时唤醒设备。

答案 1 :(得分:8)

警报类型:

  • ELAPSED_REALTIME - 在设备启动后指定的时间长度后触发待处理的意图。如果设备处于睡眠状态,则设备下次唤醒时会触发。
  • ELAPSED_REALTIME_WAKEUP - 在设备启动后指定的时间长度后触发挂起的意图。如果它处于睡眠状态,它会唤醒设备。
  • RTC - 在指定时间触发待处理的意图。如果设备处于睡眠状态,则在下次设备唤醒时才会发送。
  • RTC_WAKEUP - 在指定时间触发待处理的意图,如果睡着则唤醒设备。

答案 2 :(得分:1)

警报有两种通用时钟类型:“已用实时”和“实时时钟”(RTC)。经过实时使用“自系统启动以来的时间”作为参考,实时时钟使用UTC(挂钟)时间。这意味着经过的实时时间适合根据时间的推移设置警报(例如,每隔30秒触发一次警报),因为它不受时区/区域设置的影响。实时时钟类型更适合依赖于当前区域设置的警报。

来源:https://developer.android.com/training/scheduling/alarms.html

答案 3 :(得分:0)

从网站上你可以得到4个constanst之间的区别 以下是设置警报的示例

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);

希望这会对你有所帮助

答案 4 :(得分:-4)

你可以读到这个:

http://developer.android.com/reference/android/app/AlarmManager.html

警报之间有所不同