3

我的应用历史记录正常;当我启动意图时,我没有使用任何花哨的标志或任何东西。仅按顺序、单任务启动的活动。如果我回家,然后使用任务杀手杀死我的应用程序,下次我打开应用程序时,它会在我杀死之前的最后一个活动而不是声明的 Main 活动处启动。此外,如果我然后点击返回退出应用程序并再次重新打开它,我会得到任何在我之前在杀死之前打开的 Activity 之前打开的 Activity。

像这样的东西:

A = 主要活动; B = 其他一些活动; C = 其他一些活动

  • 打开应用程序 - A
  • 打开 B - B
  • 打开 C - C
  • 使用任务杀手杀死应用程序
  • 打开应用程序-C
  • 后退按钮 - 设备主页
  • 打开应用程序-B
  • 后退按钮 - 设备主页
  • 打开应用程序 - A

我希望在任务终止后不会记住后台堆栈。我希望应用程序始终从声明的 Main 活动开始,除非它已经在后台运行。(这里不是这种情况,因为正在使用杀戮)然而,这两件事似乎都没有发生,我不知道为什么。

我尝试在A的 onCreate 上的Application 类中放入一些代码来设置“初始化”布尔值,然后在BC的 onCreate 中检查它。想法是使用 NEW_TASK 和 CLEAR_TOP 标志启动A的意图,以尝试检测和纠正场景,但它仍然表现出相同的行为,除了它还将A放在剩余的任何东西之上。因此,它不会将应用程序启动到B中,而是将应用程序启动到BA中。

根据我所读到的有关活动生命周期和操作系统杀死应用程序的所有内容,这是不可能的,但它肯定会发生在我所有的测试设备上。有没有人对可能导致这种奇怪行为的原因有任何想法?

4

2 回答 2

4

您的应用运行正常。这是默认行为。如果一个应用程序在后台并且另一个应用程序需要资源,Android 将终止它。当用户返回到原来的应用程序时,他会期望以与离开时相同的状态返回到它,因此 Android 会记住该状态并恢复它。这是标准的、默认的、用户期望的行为。

如果你不想要这种行为,你应该添加

android:clearTaskOnLaunch="true"

到清单中<activity>的根声明Activity(具有 ACTION=MAIN 和 CATEGORY=LAUNCHER 的声明)。当用户从主屏幕返回到它时,这将导致 Android 从头开始​​启动您的应用程序。

如果您也不希望用户在从“最近的任务”屏幕启动时返回到您的应用程序的先前状态,您需要添加

android:excludeFromRecents="true"

<activity>为您的根声明Activity。这将阻止 Android 将您的应用添加到最近任务列表中,因此用户无法从“最近任务”屏幕返回到您的应用。

于 2021-04-24T20:06:05.783 回答
3

我认为您的应用程序没有任何问题。大多数任务杀手只是在选定的应用程序上调用restartPackage(),最终调用saveInstanceState(),所以你的应用程序保存它的状态。这使得它更有可能从内存启动,但前提是 Android 需要内存。基本上,“任务杀手”应用程序不会杀死任何东西。

从 ActivityManager 文档中,restartPackage() 与 killBackgroundProcesses() 相同,后者执行“这与内核杀死这些进程以回收内存相同;系统将在未来根据需要重新启动这些进程。”

于 2013-04-10T00:14:15.557 回答