未决意图中的所有标志是什么

What are all the flags in pending intent

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

甚至android文档也很难理解

有人可以提供有关未决意图标志的解释,特别是 FLAG_ONE_SHOTFLAG_NO_CREATE 的示例吗?

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

  • FLAG_NO_CREATE 用于获取现有的 PendingIntent。如果匹配 PendingIntent 存在,它将被 returned 给调用者。如果不存在匹配的 PendingIntent,则什么也不会发生。框架不会为调用者创建新的 PendingIntent 和方法 returns null。您可以使用此方法确定特定 PendingIntent 是否存在。您也可以使用此方法获取现有的 PendingIntent,以便您可以取消它。

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

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

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


注意:有关 Android 框架如何尝试找到“匹配”的信息,请参阅此答案 PendingIntent