【问题标题】:Android - What is a PendingIntent ?Android - 什么是 PendingIntent?
【发布时间】:2014-08-10 19:14:30
【问题描述】:

我是 Android 开发的新手,我不得不使用 AlarmManager 重复警报。这是我第一次有机会使用 PendingIntent。然而,在阅读了文档 (http://developer.android.com/reference/android/app/PendingIntent.html) 之后,我真的很困惑 PendingIntent 到底是什么。

我的问题是:

第一季度。 PendingIntent 'pending' 以什么方式出现?很抱歉这个问题,但我想直观地了解PendingIntent 的含义。

第二季度。文档说:

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

怎么样,

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

与我的代码有关吗?

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

第三季度。我也不明白文档中的内容:

由于这种行为,重要的是要知道两个 Intent 何时被认为是相同的,以便检索 PendingIntent。人们犯的一个常见错误是创建多个 PendingIntent 对象,其 Intent 仅在其“额外”内容上有所不同,期望每次都获得不同的 PendingIntent。这不会发生。 Intent 中用于匹配的部分与 Intent.filterEquals 定义的部分相同。如果您使用两个根据 Intent.filterEquals 等效的 Intent 对象,那么您将获得相同的 PendingIntent。

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

对此的任何帮助将不胜感激。我的在线搜索没有给我想要的答案。另外,非常感谢您抽出宝贵的时间。

【问题讨论】:

标签: android android-pendingintent


【解决方案1】:

Q1 - 以何种方式“待定”?

系统将您存储在PendingIntent 中的值存储起来,并让您(或框架的另一部分)稍后查找它们,就好像查找它们的组件已经使用该信息自发地创建了一个新的 Intent。

Q2 - “对令牌的引用”与我的代码有何关联?

Android 框架实际上并不存储您创建的 PendingIntent 对象;它对意图的“识别信息”(在本例中为动作、数据、类型、类和类别)进行哈希处理,并使用它来查找其余信息。您创建的文字 PendingIntent 对象不会被保存,它所代表的信息会。

Q3 - 什么是“额外内容”?

这里所指的“附加”是您通过putExtra() 存储的可打包物品。 requestCode 和 flags 值也被保存和检索,但是当文档提到“附加”时,它意味着 Intent 可以用来携带附加信息的文字 getExtras() Bundle。

【讨论】:

    猜你喜欢
    • 2011-10-02
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多