5

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

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

让我印象深刻的是 Intent 模型是 android 系统的核心,因此是高度通用的。正因为如此,我看到的关于它的用法的例子往往是多种多样的。这种变化混淆了我正在尝试学习的概念,这令人沮丧。

我的问题很简单,但可能很难用简单的术语来解释。我了解意图是对其他活动的消息,并且其他活动可以声明对它们的清单感兴趣。待处理的意图,意图的包装,让我感到困惑。

  1. 我看到有关权限和令牌的文档。我明白了,但是为什么需要将待处理的意图作为一个单独的实体——它会启用什么行为?
  2. 待处理的意图会导致哪些活动/任务生命周期行为?
  3. 什么时候需要广播接收器?
  4. 广播接收器的限制是什么?

我意识到这些是严重的新手问题(我是),但我非常想了解这些核心概念,所以我不必依赖示例/指南/官方文档。

欢迎任何反馈。谢谢。

4

1 回答 1

3

PendingIntent 的主要目的是给另一个应用程序书面许可来代替你做某事。应用程序被允许做的事情基本上受到以下两个因素的限制:

  • 能见度。其他应用程序无法调用未提供公开可见(或任何)意图过滤器的服务或活动等组件。它们只能由您的应用程序使用指定其包和类名的显式意图来调用。
  • 权限。每个应用程序都可以请求一定数量的权限。这些大多是预定义的权限,但您也可以选择定义自己的权限,尽管我从未使用过。您的应用程序不能做任何超出这些权限的事情。

现在,通过未决意图,您可以克服这两个限制,如果具有所需权限和可见性来做某事的应用程序允许代替她做某事。例如,一个应用程序可以允许您调用她的其中一个私有活动,如果它为您提供了一个未决意图,其中包含所述活动的显式意图。

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

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

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

A broadcast receiver is only granted about 10 seconds to do stuff, after that it gets killed by the system. So if you want to perform any kind of long running processes you'll have to use a background service, or open up an Activity to let your users do stuff.

于 2012-06-13T10:23:01.857 回答