【发布时间】:2015-07-28 13:03:35
【问题描述】:
我已经使用 AlarmManager 编写了一个包含多个警报的应用程序。我还有一种方法可以取消所有当前/未决的警报。它运行良好,但是如果用户从最近关闭应用程序(警报仍处于活动状态,如预期的那样),我的取消警报方法不再起作用(应用程序崩溃)。有什么解决办法吗?用户关闭应用后如何取消闹钟?
这是我的闹钟的样子:
ArrayList<PendingIntent> intentArray = new ArrayList<PendingIntent>();
AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
...
Intent intent = new Intent(this, AlertReceiver.class);
Long cal = new GregorianCalendar().getTimeInMillis() + sms_in_x_minutes * 60 * 1000;
PendingIntent i1 = PendingIntent.getBroadcast(this, intent_id++, intent, 0);
am.set(AlarmManager.RTC_WAKEUP, cal, i1);
intentArray.add(i1);
这就是我的取消方法的样子:
private void cancelAlarms(){
if(intentArray.size()>0){
for(int i=0; i<intentArray.size(); i++){
am.cancel(intentArray.get(i));
}
intentArray.clear();
}
}
我的猜测是我关闭应用程序后intentArray 和am 为空,并且PendingIntents 没有保存。但我不知道如何解决这个问题。
【问题讨论】:
-
你试过 Android Life Cycle,你应该可以取消警报
onDestroy但是我不确定在内存不足的情况下如何工作。 -
是的,正如 Pier 建议的那样,我将不得不使用 onDestroy ,这很好。它将防止我所有的崩溃。理想情况下,我希望在关闭并启动应用程序后取消所有活动警报。也许那是不可能的。还是非常感谢!
-
一个应用永远不需要设置多个闹钟。只需要最早的。当那个触发时,您的应用程序可以将下一个最早设置为它执行的第一个任务。这使得跟踪警报变得更加简单。这也使得重启后再次设置它们变得更容易,因为警报不会在重启后继续存在。
-
谢谢库夫斯!我绝对可以做到这一点,一个警报可能更聪明:) 但即使我只使用一个(最早的)警报。有没有办法(假设我不使用 OnDestroy)在应用程序关闭并重新打开后取消该警报?
-
看我的回答。下面。
标签: java android alarmmanager alarms