将PendingIntent存储在对象中供日后检索以取消警报是否是不好的做法?
我使用PendingIntent
和AlarmManager
制作闹钟应用程序。我知道为了取消PendingIntent,您需要重新创建它。在我的应用程序中,很像其他许多闹钟应用程序,有一个带有开关的闹钟列表可以打开/关闭每个闹钟。当切换关闭,我目前重新创建的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();
我不必重新创建意图,获取id,或从前面显示的代码重新创建PendingIntent。这将最终节省时间和资源(不是很多,但这是一个很好的做法),所以我有几个问题:
1)将PendingIntent存储在对象中并在以后使用它而不是重新创建它有什么问题吗?这似乎是一个简单的答案,但我从来没有见过任何人这样做过。
2)重新创建我不知道的PendingIntent是否有优势?
谢谢!
将PendingIntent存储在对象中并在以后使用它而不是重新创建它有什么问题吗?
须得Intent
没有一些大规模的有效载荷(例如,在一个额外的Bitmap
),你应该确定。
这似乎是一个简单的答案,但我从来没有见过任何人这样做过。
https://github.com/commonsguy/cw-omnibus/tree/v8.7/AlarmManager/Simple,虽然这是一个微不足道的例子。
重新创建我不知道的PendingIntent是否有优势?
它适用于您没有PendingIntent
的情况。你的过程不会永远活着。如果您想使用缓存PendingIntent
作为优化,那很好,但如果需要的话,您需要有能力创建PendingIntent
。
感谢您的帮助!并不知道如何发送消息的人,但你可以看看我的另一个问题:https://stackoverflow.com/questions/45381092/how-to-stop-alarm-from-executing-after-pendingintent-has-被接收的,机器人 – Michael