我的应用历史是正常的;当我启动 Intent 时,我没有使用任何花哨的标志或任何东西。只有顺序的、单任务启动的 Activity 。如果我回到主页,然后使用任务 killer 来终止我的应用程序,那么下次我打开该应用程序时,它会在我在终止之前进行的最后一个 Activity 而不是声明的主要 Activity 中启动。此外,如果我随后点击返回退出应用程序并再次重新打开它,我会得到在我之前打开的 Activity 之前打开的任何 Activity 。
像这样:
A = 主要 Activity ; B = 一些其他 Activity ; C = 一些其他 Activity
- 打开应用 - A
- 打开 B - B
- 打开 C - C
- 使用任务 killer 杀死应用
- 打开应用 - C
- 后退按钮 - 设备主页
- 打开应用 - B
- 后退按钮 - 设备主页
- 打开应用 - A
我希望任务终止后不会记住后台堆栈。我希望该应用程序始终从声明的主要 Activity 开始,除非它已经在后台运行。 (这里不是这种情况,因为正在使用杀戮)然而,这两件事似乎都没有发生,我不知道为什么。
我尝试在 A 的 onCreate 上输入一些代码在我的应用程序类中设置一个“初始化” bool 值,然后在 B 和 中检查它>C 的 onCreate。这个想法是用 NEW_TASK 和 CLEAR_TOP 标志启动 A 的 Intent ,以尝试检测和纠正这种情况,但它仍然表现出相同的行为,除了它还会将 A 在剩下的任何东西之上。因此,不是将应用程序启动到 B,而是将应用程序启动到 BA。
根据我所读到的关于 Activity 生命周期和操作系统终止应用程序的所有内容,这是不可能的,但它肯定会在我的所有测试设备上发生。有没有人知道是什么导致了这种奇怪的行为?
最佳答案
您的应用运行正常。这是默认行为。如果一个应用程序在后台并且另一个应用程序需要资源,Android 将终止该应用程序。当用户返回到原始应用程序时,他会期望返回到它时的状态与他离开时的状态相同,因此 Android 会记住状态并恢复它。这是标准的、默认的、用户预期的行为。
如果你不想要这种行为,你应该添加
android:clearTaskOnLaunch="true"
到<activity>
为您的根声明 Activity
(具有 ACTION=MAIN 和 CATEGORY=LAUNCHER 的那个)在 list 中。当用户从主屏幕返回时,这将导致 Android 从头开始启动您的应用。
如果您也不希望用户在从“近期任务”屏幕启动应用时返回到之前的状态,您需要添加
android:excludeFromRecents="true"
到<activity>
为您的根声明 Activity
以及。这将阻止 Android 将您的应用添加到近期任务列表中,因此用户无法从“近期任务”屏幕返回到您的应用。
关于android - 杀死后重新打开应用程序,打开上一个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15912807/