如果一个应用程序已经运行,它还会再次启动吗?

3

我正在开发一款应用程序,并且正在进行最后的修整。我想知道,如果用户在应用程序运行时按下“主页”按钮,然后再次点击图标尝试再次运行它,应用程序会怎样处理? 它会将当前应用程序带到最前面吗?还是会运行一个新实例?我想知道这一点是因为我的应用程序有很多线程,如果用户运行两个实例的话,它会消耗他们的电池寿命。


1
@JackTurky,这不正确。当点击HOME按钮时,onDestroy()方法不会被调用。 - David Wasser
@DavidWasser 是正确的,onDestroy() 只有在 Android 系统终止进程以释放内存时才会被调用,而 onPause() 则会在按下 Home 按钮时被调用。 - John
@John 不,那也不正确。如果Android杀死应用程序的进程以释放内存,它只是这样做。它会杀死进程。砰。死了。它不会调用任何东西,包括onDestroy()。这就是为什么你需要在onPause()中保存状态,因为这是唯一保证被调用的生命周期方法。 - David Wasser
@DavidWasser 请参考https://dev59.com/PG855IYBdhLWcg3wQx5L#4449988,以及http://developer.android.com/reference/android/app/Activity.html#onDestroy%28%29。其中提到,当系统准备杀死应用程序时,将调用onDestroy方法。 - John
很抱歉对此如此严谨,但许多开发人员并不真正理解这是如何工作的。我知道这很复杂和令人困惑。 - David Wasser
显示剩余4条评论
1个回答

2

这取决于您在清单文件中设置的活动android:launchMode

默认情况下,系统始终在目标任务中创建活动的新实例并将意图路由到该实例。

有关详细信息,请参见参考文档


我想将我的活动设置为single_instance以防止多个实例。 - John
singleTask 我相信。使用 singleInstance,活动始终是其任务的唯一成员。顺便问一下,您确定需要防止多个实例吗?对于大多数情况,默认行为已足够。 - Mariusz Jamro
我的应用程序往往会使用大量的内存,多个实例对电池寿命和性能都不利。 - John
1
这个答案是不正确的。如果用户正在使用您的应用程序并按下HOME按钮,包含您的活动的任务将被放入后台。如果用户然后返回到您的应用程序(无论是从最近任务列表中选择它,还是在可用应用程序列表中点击您的应用程序图标),Android将简单地将包含您的活动的现有任务带回到前台。在这种情况下,Android不会创建您的启动活动的新实例。 - David Wasser
1
请注意,有一个长期存在的 Android bug,在某些特殊情况下确实会导致根活动的新实例被创建。如果应用程序在安装程序中刚刚安装/更新后立即启动,则可能会发生这种情况。但这是一种特殊情况,而不是默认行为。请参见 https://dev59.com/Muo6XIcBkEYKwwoYNBln#16447508。 - David Wasser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接