【问题标题】:Seeking laymans explaination of the pending intent concept寻求外行对未决意图概念的解释
【发布时间】:2012-06-13 10:02:29
【问题描述】:

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

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

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

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

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

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

欢迎任何反馈。谢谢。

【问题讨论】:

    标签: android android-pendingintent


    【解决方案1】:

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

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

    现在,如果应用程序具有所需的权限和可见性来做某事,那么通过待定意图,你可以克服这两个限制,特别允许做代替她。例如,一个应用程序可以允许您调用她的其中一个私有活动,如果它为您提供了一个包含所述活动的明确意图的待处理意图。

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

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

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

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

    【讨论】:

    • 优秀的文章。我现在对这个概念更有信心了。感谢您的快速回答。
    猜你喜欢
    • 2013-06-19
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    相关资源
    最近更新 更多