为什么行为不同?- android:launchMode="singleTask" 、 android:taskAffinity="" 和 Intent.FLAG_ACTIVITY_NEW_TASK

2023-11-25

我有四项活动 - A、B、C、D

我以 --> A-B-C-D-B 的方式称呼这四个活动。(指明方式)

我有三种情况。

1st :-我正在定义android:launchMode="singleTask"仅在 B 活动中。我通过以下方式调用所有活动Intent以上述指定方式。

现在首先调用 A-B-C-D ,BackStack Task 1 : A-B-C-D,

现在我再次打电话给B,然后BackStack Task 1 : A-B。这里 C 和 D 活动被销毁。

2nd :-我正在定义android:launchMode="singleTask" & android:taskAffinity=""在 B 活动中。我通过以下方式调用所有活动Intent以上述指定方式。

现在首先调用 A-B-C-D ,BackStack Task 1 : A

                                  Task 2 : B-C-D

现在我再次打电话给B,然后BackStack Task 1 : A

                                Task 2 : B ,Here C and D Activities are destroyed.

3rd :-我正在定义Intent.FLAG_ACTIVITY_NEW_TASK & android:taskAffinity=""在 B 活动中。我通过以下方式调用所有活动Intent以上述指定方式。

现在首先调用 A-B-C-D ,BackStack Task 1 : A

                                  Task 2 : B-C-D

现在我再次打电话给B,然后BackStack Task 1 : A

                                Task 2 : B-C-D , Here **Can't call B again**

这里说 FLAG_ACTIVITY_NEW_TASK 产生与“singleTask”相同的行为 -https://developer.android.com/guide/components/activities/tasks-and-back-stack.html

那么哪些是正确的场景呢?我的理解是正确的,或者我误解了一些东西。


我已经重现了您所描述的行为。

第一种情况基本上没有记录,因为singleTask Activity应该始终是任务的根源。因为安卓使用taskAffinity在确定如何以及在何处启动Activity, your singleTask Activity正在启动到现有任务中,但不是作为根任务Activity。这使得该行为与记录的行为不同。当您启动时B from D,Android需要提供Intent to B在通话中onNewIntent(),它无法做到这一点C and D坐在上面B。这样Android就完成了C and D然后调用onNewIntent() on B.

第二个场景显示您现在有 2 个任务,因为singleTask Activity以 root 身份启动新任务Activity。再次,当D发射B,Android需要提供Intent to B通过致电onNewIntent(),如果C and D挡道了。这样Android就完成了C and D然后交付Intent to B in onNewIntent().

第三个场景展示了使用FLAG_ACTIVITY_NEW_TASK. When A发射B with FLAG_ACTIVITY_NEW_TASK,Android 会查找具有以下内容的现有任务B作为根Activity。由于找不到,因此启动B作为根在新任务中Activity. When D发射B with FLAG_ACTIVITY_NEW_TASK, Android 会查找具有以下内容的任务B作为根Activity,如果找到一个,就会将该任务带到前台但不提供Intent to onNewIntent()。这只是将现有任务以其进入后台时的状态带到前台的一种方法。这就是你所看到的。这种行为也被记录(某种程度上),但由于所有这些场景之间非常复杂的相互依赖关系,所有可能的情况都没有明确记录。有时您需要通过经验观察而不是阅读文档来发现其工作原理。

感谢您的挑战。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么行为不同?- android:launchMode="singleTask" 、 android:taskAffinity="" 和 Intent.FLAG_ACTIVITY_NEW_TASK 的相关文章

随机推荐

  • 如何从任务管理器的“应用程序”选项卡中隐藏窗口?

    我对 CreateWindowEx 函数有疑问 我有 2 个窗口 一个主窗口和一个弹出窗口 我想要一个弹出窗口隐藏在任何地方 它当前不显示在任务栏中 甚至在 alt tab 菜单中也不可见 但是 它在任务管理器的 应用程序 选项卡上可见 我
  • Netbeans Java 控制台编码 UTF-8 和变音符号

    我的问题是关于使用 NetBeans 7 4 编写的一个小 java 程序 显然存在编码问题 因为我需要处理包含特殊字符 的德语输入 从文件中读取文本就像一个魅力 特殊字符会按预期保存和显示 String fileText new Scan
  • 按下“后退”按钮时 setResult 不起作用

    我试图在按下 后退 按钮后设置结果 我调用 onDestroy Intent data new Intent setResult RESULT OK data 但当谈到 onActivityResult int requestCode in
  • 使 UILabel 可聚焦和可点击 (tvOS)

    我正在尝试实现 6 行高描述标签 并且希望它能够聚焦 理想情况下 这意味着扩展 UILabel 类来制作自定义组件 我尝试通过实施canBecomeFocused and didUpdateFocusInContext但我的 UILabel
  • 如何在 Web 应用程序中从 Azure AD 刷新 ID 令牌?

    我正在尝试设置一个 Azure Web 应用程序以通过 Azure AD 进行身份验证并在后台自动刷新 ID 令牌 一篇很棒的博客文章帮助我了解了整个事情是如何运作的 https cgillum tech 2016 03 07 app se
  • 带有BehaviorSubject和异步管道的RxJS share()运算符 - Angular

    我有一个BehaviorSubject正在被作为可观察的消耗 testForStack Observable
  • 终端元箭头键绑定中的 emacs

    我刚刚从使用 Emacs app 切换到使用 iterm2 作为终端模拟器的终端模式下的 emacs 服务器和 emacsclient 不过 我在某些键绑定方面遇到了一些问题 特别是 M 左箭头打印字符 D M 右箭头打印字符 C M 上箭
  • 没有模拟器的颤振

    我无法在我的工作环境中安装Android模拟器 因此我想知道是否可以在没有任何移动设备 或模拟器 的情况下编码 学习Flutter 例如 是否可以使用浏览器运行 测试代码 有两个非移动选项 目前都处于开发阶段 但可以用于学习 Flutter
  • 不带注释的自动装配@Autowired

    我正在查看工作区中的一些旧示例 我看不出怎么样 自动装配完成 因为没有 Autowired Spring boot facebook 默认配置 Controller RequestMapping public class HelloCont
  • 更改单个 UITableViewCell 的 UITableView seperatorColor

    我有一个UITableView使用各种定制的UITableViewCells 我希望能够让这些表格单元格之一以与其他单元格不同的分隔符颜色显示 我知道tableview seperatorColor更新整体tableView 是否有我缺少的
  • 如何清除 websocket 上的缓冲区?

    看起来 websocket 在断开连接时会缓冲消息 并在连接后立即发送消息 我理解了bufferedAmountwebsocket 的数量正在增加 但它是只读的 有没有办法重置缓冲区 以便在断开连接时发送的消息不会自动发送 我认为您正在寻找
  • 单击链接时 IE 会随机最小化

    我有一个奇怪的问题 当我单击 IE7 中的链接时 窗口最小化 它似乎只是页面上链接的子集 它也不会始终在相同的链接上发生 并且因计算机而异 链接文本示例 a href span Canadian Legislation span a 有人以
  • 从二项式分布生成数字的数值算法

    我需要从二项式 n p 分布生成随机数 Binomial n p 随机变量是 n 个均匀变量的总和 这些变量以 p 的概率取 1 在伪代码中 x 0 for i 0 I
  • Django 反向 url 以及基于类的视图的参数

    我刚刚开始学习 python 和 django 我有一个问题 我接到的任务是将函数视图转换为基于类的视图 但我的链接现在不起作用了 这些来自 urls py url r ContactIndex as view url r add Cont
  • 如何在我的设备上获取 logcat 以显示所有进程的日志

    我正在尝试编写一个应用程序来读取我设备上的所有日志 我有一个客户端 服务架构 并且我看到来自客户端和服务进程的日志消息 但我没有看到来自手机上任何其他应用程序的任何消息 我确实看到使用桌面 logcat 的其他消息 我需要root吗 代码片
  • OneToMany - 连接表和外键之间有什么区别?

    有可能禁用 OneToMany关系连接表与 JoinColumn注解 默认是连接表 例如 生产系统的优点和缺点是什么 什么时候应该使用连接表 什么时候不应该使用 谢谢 默认情况下 OneToMany仅当您使用时才会创建连接表单向关系 换句话
  • 将 MySQL 表转换为 parquet 时出现 Spark 异常

    我正在尝试使用 Spark 1 6 2 将 MySQL 远程表转换为 parquet 文件 该进程运行 10 分钟 填满内存 然后以以下消息开始 WARN NettyRpcEndpointRef Error sending message
  • 如何在 Html 中显示 Typescript 代码

    我想在 Html 模板中显示组件的代码 不是代码生成的值 而是实际的代码 像这样 import Injectable from angular core import Resolve ActivatedRouteSnapshot from
  • ARM64下如何获取CPU品牌信息?

    在Windows X86中 可以通过以下命令查询CPU品牌cpuid内在功能 这是代码示例 include
  • 为什么行为不同?- android:launchMode="singleTask" 、 android:taskAffinity="" 和 Intent.FLAG_ACTIVITY_NEW_TASK

    我有四项活动 A B C D 我以 gt A B C D B 的方式称呼这四个活动 指明方式 我有三种情况 1st 我正在定义android launchMode singleTask 仅在 B 活动中 我通过以下方式调用所有活动Inten