我的应用历史记录正常;当我启动意图时,我没有使用任何花哨的旗帜或任何东西。只有顺序,单任务启动的活动。如果我回家,然后使用任务杀手杀死我的应用程序,下次打开应用程序时,它会在我杀死之前的最后一个活动而不是声明的主要活动中启动。另外,如果我然后点击Back退出应用程序并再次重新打开它,我会在之前打开之前打开的任何Activity打开。
这样的事情:
A =主要活动; B =其他一些活动; C =其他一些活动
我希望任务杀死后不会记住后台堆叠。我希望应用程序始终从声明的Main活动开始,除非它已经在后台运行。 (因为杀人被利用,所以情况并非如此)但这两件事似乎都没有发生,我不知道为什么。
我尝试在 A 的onCreate上的应用程序类中设置一些代码来设置“初始化”布尔值,然后在 B 和 C 的onCreate。我们的想法是使用NEW_TASK和CLEAR_TOP标志启动 A 的意图来尝试检测并纠正方案,但它仍然表现出相同的确切行为,除了它还会放 A 除了剩下的东西之外。因此,不是将应用程序启动到 B ,而是将应用程序启动到 BA 。
基于我读过的关于活动生命周期和操作系统杀死应用程序的所有内容,这是不可能的,但它确实发生在我的所有测试设备上。有没有人对可能造成这种奇怪行为的原因有任何想法?
答案 0 :(得分:4)
您的应用运行正常。这是默认行为。如果应用程序在后台并且另一个应用程序需要资源,Android 将终止该应用程序。当用户返回原始应用程序时,他会期望返回到与他离开时相同的状态,因此 Android 会记住该状态并恢复它。这是标准的、默认的、用户期望的行为。
如果你不想要这种行为,你应该添加
android:clearTaskOnLaunch="true"
到清单中根 <activity>
的 Activity
声明(带有 ACTION=MAIN 和 CATEGORY=LAUNCHER 的声明)。这将导致当用户从主屏幕返回 Android 应用时,它会从头开始启动您的应用。
如果您也不希望用户在从“最近的任务”屏幕启动时返回到您应用的先前状态,您需要添加
android:excludeFromRecents="true"
到您的根 <activity>
的 Activity
声明也是如此。这将阻止 Android 将您的应用添加到最近任务列表中,因此用户无法从“最近任务”屏幕返回到您的应用。
答案 1 :(得分:1)
我认为您的应用没有任何问题。大多数任务杀手只在所选应用程序上调用restartPackage(),最终调用savedInstanceState(),以便您的应用程序保存其状态。这使得它更有可能从内存启动,但只有当Android需要内存时才会启动。基本上,“任务杀手”应用程序不会杀死任何东西。
来自ActivityManager docs, restartPackage()与killBackgroundProcesses()相同,后者则相同 “这与内核杀死这些进程以回收内存相同;系统将根据需要在将来重新启动这些进程。”