我有一个服务,首先创建一个新的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上使用文件,但有些设备显然没有这样的东西。
答案 0 :(得分:4)
这是PendingIntent
的工作方式; - )
第一次调用PendingIntent.getService()
会创建一个新的PendingIntent
,requestCode
设置为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()
。