2013-04-09 132 views
0

我的应用程序历史记录是正常的;当我启动意图时,我没有使用任何花哨的旗帜或任何东西。只有顺序的单任务启动活动。如果我回家,然后使用任务杀手来杀死我的应用程序,那么下次打开应用程序时,它会在杀死之前的最后一个活动中启动,而不是声明的Main活动。此外,如果我然后点击返回以退出应用程序并重新打开该应用程序,则会在我之前在杀死之前打开的任何活动之前获得任何活动。杀死后重新打开应用程序,打开以前的活动

像这样:

=主要活动; B =一些其他活动; Ç =其他活动

  • 打开应用 -
  • 打开乙 -
  • 的Open C - Ç
  • 杀应用与任务的杀手
  • 打开app - C
  • 后退按钮 - 设备主
  • 打开应用 -
  • 后退按钮 - 设备主
  • 打开应用 - 一个

我会期望返回堆栈不会以后被记住任务杀死。我希望应用程序始终从声明的主活动开始,除非它已经在后台运行。 (因为杀人正在被利用,所以这里不是这种情况)但是这两件事似乎都没有发生,我不知道为什么。

我试图把一些代码来设置在我的应用类中的“初始化”布尔上一个的的onCreate,然后要检查它ç的的onCreate。有一个想法是启动A的意图与NEW_TASK和CLEAR_TOP标志来尝试检测和纠正情况,但它仍然展现出相同的确切行为,除了它也会把A放在任何剩余的顶部。因此,不是将应用程序启动到B,而是将应用程序启动到BA

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

+0

每当用户从主屏幕启动应用程序时,是否要启动活动A? – 2013-04-09 23:34:28

+0

这是我的目标,是的。 – Dave 2013-04-10 12:27:49

+0

只有这样才能使它变得复杂,你会看到很多闪烁,这取决于你的应用任务堆栈的大小。 – 2013-04-10 16:04:43

回答

1

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

从ActivityManager文档, restartPackage()是相同的killBackgroundProcesses(),后者不 “这是相同的内核杀死这些过程以回收存储器;所述系统将需要在重新启动这些过程的护理根据需要创造未来。“

+0

如果我也从Eclipse终止应用程序,这是公平的,我不知道IDE如何执行“终止”功能。是否有可能强制应用程序始终从正确的主要活动开始? – Dave 2013-04-10 14:18:17

相关问题