未决意图中的所有标志是什么
What are all the flags in pending intent
我知道待定意图的概念,但标志令人困惑。
甚至android文档也很难理解
有人可以提供有关未决意图标志的解释,特别是 FLAG_ONE_SHOT
和 FLAG_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
:
我知道待定意图的概念,但标志令人困惑。
甚至android文档也很难理解
有人可以提供有关未决意图标志的解释,特别是 FLAG_ONE_SHOT
和 FLAG_NO_CREATE
的示例吗?
PendingIntent
由 Android 框架管理。当您调用其中一个 PendingIntent.getXXX()
方法时,框架会尝试查找与您传递给 getXXX()
方法的参数相匹配的现有 PendingIntent
。如果它找到一个匹配的 PendingIntent
,它将 return 发送给调用者。如果它没有找到匹配的 PendingIntent
它会(通常)为调用者创建一个新的 PendingIntent
和 return。您可以使用标志更改此标准行为:
FLAG_NO_CREATE
用于获取现有的PendingIntent
。如果匹配PendingIntent
存在,它将被 returned 给调用者。如果不存在匹配的PendingIntent
,则什么也不会发生。框架不会为调用者创建新的PendingIntent
和方法 returnsnull
。您可以使用此方法确定特定PendingIntent
是否存在。您也可以使用此方法获取现有的PendingIntent
,以便您可以取消它。FLAG_ONE_SHOT
很奇怪。根据文档,此标志应导致PendingIntent
在使用(发送)后被删除。但是,此标志还有其他副作用。例如,如果您使用此标志创建一个PendingIntent
,然后尝试通过使用FLAG_NO_CREATE
调用PendingIntent.getXXX()
来获取此PendingIntent
(或测试它的存在),则框架将始终 returnnull
。因此我从不使用它,我也建议永远不要使用它。FLAG_CANCEL_CURRENT
用于删除现有的PendingIntent
并创建一个新的。该框架首先尝试找到匹配的PendingIntent
。如果它找到一个,它会取消(删除)这个PendingIntent
。这意味着持有此PendingIntent
的任何应用程序将无法触发(发送)它。然后,该框架使用提供的参数创建一个新的PendingIntent
并将其 return 发送给调用者。FLAG_UPDATE_CURRENT
用于更新现有的PendingIntent
。该框架首先尝试找到匹配的PendingIntent
。如果找到一个,现有PendingIntent
中的“extras”将被提供的Intent
参数中的“extras”覆盖。如果未找到匹配的PendingIntent
,则使用提供的参数创建一个新的。找到的(或新创建的)PendingIntent
returned 给调用者。
注意:有关 Android 框架如何尝试找到“匹配”的信息,请参阅此答案 PendingIntent
: