寻求外行人对未决意图概念的解释

时间:2012-06-13 10:02:29

标签: android android-pendingintent

这是一个相当陈旧的问题,但坦率地说,我还没有找到满足我好奇心的答案。

在您之前,亲爱的读者,请跳到Android开发人员参考文章中粘贴我的文本,请注意我已经阅读了Intent / Pending Intent文档并且尚未解决我的困惑。

令我印象深刻的是,Intent模型是android系统的核心,因此非常通用。正因为如此,我所看到的其使用的例子往往是多种多样的。这种变化模糊了我正在努力学习的概念,这令人沮丧。

我的问题写得很简单,但也许很难以简单的方式解释。我理解,意图是对其他活动的信息,其他活动可以宣告他们对其清单的兴趣。等待意图,意图包装,让我困惑。

  1. 我看到有关权限和令牌的文档。我明白了,但为什么需要将未决意图作为一个单独的实体 - 它会启用什么行为?
  2. 待处理意图导致的活动/任务生命周期行为是什么?
  3. 何时需要广播接收器?
  4. 什么是广播接收器的限制?
  5. 我意识到这些是非常新的问题(我是),但我非常想要理解这些核心概念,所以我不必依赖示例/指南/官方文档。

    任何反馈都是受欢迎的人。感谢。

1 个答案:

答案 0 :(得分:2)

PendingIntent的主要目的是为另一个应用程序提供书面许可,代替您做某事。应用受到限制,基本上是这两个因素:

  • 可见性。其他应用程序无法调用未提供公开可见(或任何)intent-filter的服务或活动等组件。它们只能由您的应用程序使用指定其包和类名的显式意图调用。
  • 权限。每个应用程序都可以请求一定数量的权限。这些主要是预定义的权限,但您也可以选择定义自己的权限,但我从未使用过。您的应用程序无法执行超出这些权限的任何操作。

现在,对于待处理的意图,如果具有所需权限和可见性的应用程序专门允许执行某些操作,则可以超越这两个限制它代替了她。例如,如果某个应用程序为您提供了包含所述活动的明确意图的待处理意图,则该应用程序可以允许您调用其中一个私有活动。

[编辑] 例如,它们与警报管理器一起使用。它通过给出一个(待定)意图告诉警报管理器什么以及何时做。由于您的应用程序可能在时间到来时不再存在,警报管理器将不得不为您发送。这意味着那些意图只能做警报管理员允许做的事情,而不是你的应用程序允许做什么。如果允许警报管理器执行任何操作,则每个应用程序都可以使用警报管理器作为代理执行任何操作。所以你必须使用待定意图来专门授予警报管理器你特定意图所需的权利。[/ edit]

除此之外,对于常规意图没有太大的区别,至少就使用而言。对于粘性意图等确实有点复杂,但这是它的一般要点,至少据我所知。

当您想要对某些system events或其他应用程序的事件作出反应时,需要广播接收器。广播接收器是不可见的,它不会创建任何形式的视图,也不涉及任何形式的用户交互。优点是,无论您的应用程序(或更确切地说,您的活动)当前是否正在运行,都可能发生这种情况。

广播接收器只被授予大约10秒的时间来做事情,之后它被系统杀死。因此,如果您想要执行任何类型的长时间运行流程,您将必须使用后台服务,或者打开一个活动来让您的用户执行操作。