【发布时间】:2013-11-01 23:27:22
【问题描述】:
希望有人能帮我弄清楚,如果不是解决方案,至少是对行为的解释。
问题:
在某些设备上,按下启动器图标会导致当前任务被恢复,而在其他设备上,它会导致初始启动意图被触发(有效地重新启动应用程序)。为什么会这样?
细节:
当您按下“启动器图标”时,应用程序会正常启动 - 也就是说,我假设会启动一个 Intent,其名称为您的第一个 Activity,操作为 android.intent.action.MAIN,类别为 android.intent.category.LAUNCHER。然而,情况并非总是如此:
在大多数设备上,如果您在应用程序已经运行后按下启动器图标,则该进程中当前正在运行的 Activity 将恢复(不是最初的 Activity)。它恢复的方式与您从操作系统菜单的“最近的任务”中选择它的方式相同。这是我希望在所有设备上的行为。
但是,在选定的其他设备上会出现不同的行为:
在摩托罗拉 Xoom 上,当您按下启动器图标时,应用程序将始终启动初始启动
Activity,无论当前正在运行什么。我假设启动器图标总是启动“LAUNCHER”意图。在三星 Tab 2 上,当您按下启动器图标时,如果您刚刚安装了该应用程序,它将始终启动初始
Activity(与 Xoom 相同) - 但是,在您重新启动设备后安装后,启动器图标将恢复应用程序。我假设这些设备会在设备启动时将“已安装的应用程序”添加到查找表中,从而允许启动器图标正确恢复正在运行的任务?
我已经阅读了许多听起来与我的问题相似的答案,但只是将android:alwaysRetainTaskState="true" 或在Activity 中使用launchMode="singleTop" 不是答案。
编辑:
在最近一次启动此应用后,我们发现在第一次重新启动后,所有设备上已开始出现此行为。这对我来说似乎很疯狂,但通过重启过程,我实际上找不到问题所在。
【问题讨论】:
-
这似乎是一个微不足道的问题,但您是否在 Xoom 的开发选项中将“不保留活动”设置为 true?
-
不(我希望!:)) - 我已将每个活动的生命周期和后台活动记录为仍然可用(它们已停止 - 未销毁)。在操作系统再次开始第一个
Activity而不是恢复它们的情况下,操作系统似乎在它们上调用finish()。 -
如果您按下主页按钮,然后单击启动器图标,您可能知道恢复行为是 android 的默认行为。但是,如果您按后退按钮返回主屏幕,大多数手机都会完成()该应用程序。您用于退出应用程序的任何方法是否可能在不同设备上有所不同?您能否注销 onKeyUpEvent 以检查是否有些人没有奇怪地处理硬键/软键?
-
不-我确定上述问题。使用 home 将应用程序置于后台(而不是返回,你是对的,它将完成() Activity)。在 Xoom 上可以从任务列表(只是不能从启动器)恢复应用程序,所以后台堆栈肯定没有被杀死。
-
用赏金回答是解决问题中描述的问题的方法。将我自己的答案标记为“正确”,因为尽管有时问题是由启动器中的应用程序错误引起的(如他的回答中所述),但我的特定问题是由任务切换引起的。 这两个问题的解决方案都由他的解决方案解决。