首页 > 解决方案 > 待处理意图中的所有标志是什么

问题描述

我知道待定意图的概念,但标志令人困惑。

甚至 android 文档也很难理解

有人可以特别提供对未决意图标志的解释FLAG_ONE_SHOTFLAG_NO_CREATE举例说明吗?

标签: androidandroid-pendingintent

解决方案


PendingIntents 由 Android 框架管理。当您调用其中一种PendingIntent.getXXX()方法时,框架会尝试查找PendingIntent与您传递给该方法的参数匹配的现有getXXX()方法。如果它找到匹配项PendingIntent,它只会将其返回给调用者。如果它没有找到匹配项PendingIntent,它将(通常)创建一个新的PendingIntent并将其返回给调用者。您可以使用以下标志更改此标准行为:

  • FLAG_NO_CREATE用于获取现有的PendingIntent. 如果存在匹配PendingIntent,则将其返回给调用者。如果不存在匹配PendingIntent,则不会发生任何事情。框架不会创建一个新PendingIntent的并且方法返回null给调用者。您可以使用此方法来确定特定是否PendingIntent存在。您还可以使用此方法获取现有的PendingIntent,以便您可以取消它。

  • FLAG_ONE_SHOT很奇怪。根据文档,此标志应导致在PendingIntent使用(发送)后将其删除。但是,此标志还有其他副作用。例如,如果您PendingIntent使用 this 标志创建一个,然后尝试PendingIntent通过调用PendingIntent.getXXX()with来获取它(或测试它的存在) FLAG_NO_CREATE,则框架将始终返回null。出于这个原因,我从不使用它,我也建议永远不要使用它。

  • FLAG_CANCEL_CURRENT用于删除现有的PendingIntent并创建一个新的。框架首先尝试找到匹配的PendingIntent. 如果找到,它会取消(删除) this PendingIntent。这意味着任何持有它的应用程序PendingIntent都无法触发(发送)它。然后,框架PendingIntent使用提供的参数创建一个新的并将其返回给调用者。

  • FLAG_UPDATE_CURRENT用于更新现有的PendingIntent. 框架首先尝试找到匹配的PendingIntent. 如果找到,则现有参数中的“附加”将被提供的参数PendingIntent中的“附加”覆盖。Intent如果未PendingIntent找到匹配项,则使用提供的参数创建一个新项。找到的(或新创建的)PendingIntent返回给调用者。


注意:有关 Android 框架如何尝试查找“匹配”的信息,请参阅此答案PendingIntenthttps ://stackoverflow.com/a/29590084/769265


推荐阅读