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.