android - 待处理意图中的所有标志是什么
问题描述
我知道待定意图的概念,但标志令人困惑。
甚至 android 文档也很难理解
有人可以特别提供对未决意图标志的解释FLAG_ONE_SHOT
并FLAG_NO_CREATE
举例说明吗?
解决方案
PendingIntent
s 由 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
. 如果找到,它会取消(删除) thisPendingIntent
。这意味着任何持有它的应用程序PendingIntent
都无法触发(发送)它。然后,框架PendingIntent
使用提供的参数创建一个新的并将其返回给调用者。FLAG_UPDATE_CURRENT
用于更新现有的PendingIntent
. 框架首先尝试找到匹配的PendingIntent
. 如果找到,则现有参数中的“附加”将被提供的参数PendingIntent
中的“附加”覆盖。Intent
如果未PendingIntent
找到匹配项,则使用提供的参数创建一个新项。找到的(或新创建的)PendingIntent
返回给调用者。
注意:有关 Android 框架如何尝试查找“匹配”的信息,请参阅此答案PendingIntent
:https ://stackoverflow.com/a/29590084/769265
推荐阅读
- github - 在 GitHub 页面上使用 Jekyll 不显示 MathJax 方程编号
- r - 将每一行除以一个常数并创建一个新列
- jekyll - 如何在 Liquid 中向数组添加新变量
- javascript - setInterval 不适用于 MS 中的长间隔
- android - 如何进行包含多个 APK 的原子批量更新
- android - 强制深层链接在外部打开(chrome 自定义标签)
- php - cakephp 显示两个具有关系的不同表的 ID 显示 table.name
- python - Python / Bloomberg API:将单个查询返回为 int
- python - 如何在 AWS lambda 中运行 python 库的 shell 脚本?
- python-3.x - python3:Python中有一种静态变量吗?