Android - 什么是PendingIntent?

时间:2014-06-20 05:09:38

标签: android android-pendingintent

我是Android开发的新手,我不得不使用AlarmManager使用重复闹钟。这是我第一次有机会使用PendingIntent的地方。但是在阅读完文档(http://developer.android.com/reference/android/app/PendingIntent.html)后,我真的很困惑PendingIntent究竟是什么。

我的问题是:

Q1。以PendingIntent'待定' ?对此问题表示歉意,但我希望能够直观地了解PendingIntent的含义。

Q2。文档说:

  

PendingIntent本身只是对系统维护的令牌的引用,该令牌描述了用于检索它的原始数据。这意味着,即使其拥有的应用程序的进程被终止,PendingIntent本身也将保持可用于已经给出它的其他进程。如果创建应用程序稍后重新检索相同类型的PendingIntent(相同的操作,相同的Intent操作,数据,类别和组件以及相同的标志),它将接收表示同一令牌的PendingIntent,如果它仍然有效,并且可以因此调用cancel()将其删除。

怎么做,

  

引用由系统维护的描述原始数据的令牌

与我的代码相关吗?

pendingIntent = PendingIntent.getBroadcast(getApplicationContext(),0,photosIntent,0);
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME,SystemClock.elapsedRealtime(),
                           10000, pendingIntent);

Q3。我也不明白文档中的内容:

  

由于这种行为,为了检索PendingIntent,重要的是要知道两个Intent何时被认为是相同的。人们常犯的一个错误就是使用Intent创建多个PendingIntent对象,这些Intent只在其" extra"内容,期望每次获得不同的PendingIntent。这不会发生。用于匹配的Intent部分与Intent.filterEquals定义的部分相同。如果你使用两个与Intent.filterEquals相同的Intent对象,那么你将获得两个相同的PendingIntent。

extra contents是什么?这是指request code& flag方法中的getBroadcast(Context context, int requestCode, Intent intent, int flags)参数?

对此的任何帮助都将非常感激。我的在线搜索没有给我我想要的答案。另外,非常感谢你的时间。

1 个答案:

答案 0 :(得分:2)

Q1 - 以什么方式“等待”?

系统存储您存储在PendingIntent中的值,并允许您(或框架的其他部分)稍后查找它们,就好像查找它们的组件使用该信息自发地创建了一个新的Intent

Q2 - “引用令牌”如何与我的代码相关?

Android Framework实际上并不存储您创建的PendingIntent对象;它为意图(在这种情况下,动作,数据,类型,类和类别)散列“识别信息”,并使用它来查找其余信息。您创建的文字PendingIntent对象不会被保存,它所代表的信息也会保存。

问题3 - “额外内容”是什么?

此处引用的“额外内容”是您通过putExtra()存储的可分配项目。 requestCode和flags值也被保存和检索,但是当文档引用“extras”时,它意味着Intents可用于携带附加信息的文字getExtras() Bundle。