将PendingIntent存储在一个对象中以便以后检索取消警报是不好的做法吗?

时间:2017-09-08 15:26:04

标签: android alarmmanager android-pendingintent android-alarms

我正在使用PendingIntentAlarmManager制作闹钟应用。我知道为了取消PendingIntent,你需要完全重新创建它。在我的应用程序中,就像许多其他闹钟应用程序一样,有一个警报列表,其中有一个开关可以打开/关闭每个警报。切换时,我当前重新创建PendingIntent并使用以下内容取消它:

Intent intent = new Intent(context, MyBroadcastReceiver.class);
String id = this.getId().replaceAll("[^0-9]+", "");
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, id, intent, 0);
alarmIntent.cancel();

我认为上面代码的前3行是不必要的。当我切换警报时,我可以访问自定义警报对象,其中包含id以及警报的许多其他详细信息。当我创建新的警报时,如果我将新创建的PendingIntent存储在警报对象中,我可以访问用于创建警报的PendingIntent,只需检索它并在1行中取消它,如下所示:

this.getPendingIntent().cancel();

我不必重新创建intent,获取id,或者从前面显示的代码中重新创建PendingIntent。这最终会节省时间和资源(不多,但这是一个很好的做法),所以我有几个问题:

1)将PendingIntent存储在对象中并稍后使用它而不是重新创建它有什么问题吗?这似乎是一个简单的答案,但我以前没见过有人这样做过。

2)重新创建我不知道的PendingIntent是否有优势?

谢谢!

1 个答案:

答案 0 :(得分:2)

  

将PendingIntent存储在对象中并稍后使用它而不是重新创建它有什么问题吗?

假设基础Intent没有大量有效负载(例如额外的Bitmap),那么你应该没问题。

  

这似乎是一个简单的答案,但我以前没见过有人这样做过。

https://github.com/commonsguy/cw-omnibus/tree/v8.7/AlarmManager/Simple,虽然这是一个微不足道的例子。

  

重新创建我不知道的PendingIntent是否有优势?

适用于没有PendingIntent的情况。你的过程不会永远存在。如果您想使用缓存的PendingIntent作为优化,那很好,但如果需要,您需要能够创建PendingIntent