【发布时间】:2021-02-21 01:48:39
【问题描述】:
我的应用程序有两个活动:A 和 B。A - 是主要活动(默认启动),它有动作 android.intent.action.MAIN 和类别 android.intent.category.LAUNCHER,并且 A 活动已覆盖 lanchMode="singleTop",这意味着如果我们试图启动活动 A 并且 A 不是任务的顶部,然后操作系统将创建一个新的 A 实例并将其放在顶部。
步骤:
- 从应用菜单启动活动 A(点击应用图标)
- 单击活动 A 屏幕中的按钮以启动 B(现在活动堆栈看起来像 A -> B)
- 按主页按钮再次查看应用程序菜单并最小化应用程序
- 再次单击应用图标以启动我的应用
结果:打开的活动 B(堆栈看起来像 A -> B)
所以我的问题是,如果我的应用在后台的任务堆栈看起来像 A -> B(B 位于顶部,A 和 B 未完成,它们处于 onStop 状态),为什么操作系统不创建 A 的新实例当我从应用程序菜单中点击应用程序图标时,只需打开当前堆栈(点击通过 Launcher 意图将意图发送到我的应用程序,并且 Launcher 在具有启动模式 singleTop 的活动 A 中描述)
我认为它应该打开 A 的新实例(带有堆栈 A -> B -> A),因为 A 有 lanchMode="singleTop"。似乎如果应用程序在后台有活动(在onStop 状态)并且它以与第一次相同的意图打开,那么 Android 操作系统只会显示当前的应用程序任务,但我找不到任何证据。
【问题讨论】:
-
是的,这是正确的行为,请在此处阅读 Activity 的生命周期:developer.android.com/guide/components/activities/…
-
@ShailendraMadda 谢谢!但是,请您提供一个引用来证明这种行为的证据吗?
-
当您从 Activity - A 移动到 Activity - B 时,Activity A 将返回堆栈。然后,如果您单击主页按钮,那么您的 Activity-B 仍然存在,对吗?如果您完成活动,那么只有它会启动 Activity-A,否则它会打开最后一个 Activity,在您的情况下是 B。
-
@ShailendraMadda 是的,我凭经验找到了它,但我需要一些证据来证明这种行为。能否请您提供文档中的报价?
标签: android android-activity activity-lifecycle launchmode android-task