Android AlarmManager时序细节?

时间:2014-12-10 14:38:24

标签: android alarmmanager

以下是我正在运行的内容:

Main.java:

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("America/New_York"));
//make calls any time between 09:30:00 and 09:31:59
cal.set(Calendar.HOUR_OF_DAY, 9);
//we make these random so not all calls are made by all accounts all at once
cal.set(Calendar.MINUTE, randInt(30, 31));
cal.set(Calendar.SECOND, randInt(0, 59));

Intent receiverIntent = new Intent(Main.this, Receiver.class);
pendingIntent = PendingIntent.getBroadcast(Main.this, 0, receiverIntent, 0);

AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);

根据我的理解,上面的代码将会:

  • 允许该应用在后台运行(即使设备处于睡眠状态,按RTC_WAKEUP

  • 不重复

  • 根据纽约的时间,
  • 将在09:30:00和09:31:59(randInt(int, int)是自定义方法)之间触发,无论设备位于何处

根据Google,如果我希望此警报再次自动调用,我可以使用setInexactRepeatingsetRepeating。我的问题是:

如果我第一次打开应用程序是星期一午夜,则会设置闹钟(例如,星期一09:31:20)。假设我将警报设置为每24小时重复一次,然后将在周二(也在09:31:20)设置以下(即第二个)警报。

然而,在周一午夜和周二09:31:20之间,我再次打开应用程序会发生什么?该应用程序将再次调用Main.java,这将再次运行上述代码。会重置警报吗?或者他们会加倍吗?

如果第二次打开应用程序,警报设置为09:30:55,那么第二次警报是否会覆盖第一次警报?或者是否有2个警报按照之前的计划一个接一个地关闭?

我找不到关于这个主题的任何内容。如果有人知道,请澄清。谢谢。

1 个答案:

答案 0 :(得分:1)

如各种设置方法的文档中所述,AlarmManager一次仅保留PendingIntent定义的一个警报。设置闹钟将导致任何先前安排的具有相同PendingIntent的闹钟被取消。 Intent方法定义了{{1}}等式。