使用PendingIntent存储应用程序状态的可靠性

时间:2015-01-24 05:36:08

标签: android android-intent android-pendingintent

我有一个服务,首先创建一个新的Intent,并在其上调用setAction('foo')。在此之后,我致电putExtra("key","value123")。然后我调用PendingIntent.getService(this,999,intent,0)(没有传递标志),并将挂起的意图传递给AlarmManager。

然后在闹钟触发之前(或者甚至之后,似乎)我创建另一个意图并再次打电话给setAction('foo'),但不要设置任何额外内容。 然后我再次将它传递给PendingIntent.getService(this,999,intent,0)。但是,这次我在PendingIntent上调用send()以便立即收到意图。

我观察到的是原始附加内容随新Intent一起提供。我似乎能够一遍又一遍地做到这一点,即使我的应用程序被杀了,当我重新启动它时,额外的东西仍然存在。

但是,我在文档中没有特别注意到这是否是实际预期的行为。这是一种可靠的方法,通过该方法,我可以将少量数据保存在RAM中(仅限!),以防我的应用程序被终止?目前我在RAMdisk上使用文件,但有些设备显然没有这样的东西。

1 个答案:

答案 0 :(得分:4)

这是PendingIntent的工作方式; - )

第一次调用PendingIntent.getService()会创建一个新的PendingIntentrequestCode设置为999,Intent设置为ACTION="foo"

PendingIntent.getService)的第二次调用不会创建新的PendingIntent。它只是将一个标记(引用)返回给第一个PendingIntent。当您致电send()时,系统会发送原始PendingIntent

原因是当您致电PendingIntent.getService()时,Android会首先尝试找到与您指定的匹配的PendingIntent。要确定Intent是否匹配,它会检查ACTION,COMPONENT,DATA,并检查匹配的requestCode参数。在您的情况下,对PendingIntent.getService()的两次调用都具有相同的requestCode,而Intent具有相同的操作。 注意:在确定Intent s匹配时,不会考虑Intent中的“额外内容”。

如果您总是希望(重新)使用单个PendingIntent并在每次使用时覆盖“额外内容”,则可以将PendingIntent.FLAG_UPDATE_CURRENT标记添加到PendingIntent.getService()的调用中}。

如果您需要并行创建多个PendingIntent并使用不同的“额外内容”,则每次调用requestCode时都需要确保使用唯一的PendingIntent.getService()