singleInstance启动模式:为什么在活动被带到前面后调用onCreate?

时间:2017-07-28 10:26:58

标签: android android-activity activity-lifecycle

我启动主要活动,在UI中更改一些设置,按后退按钮,然后重新打开活动。再次调用onCreate()并将活动恢复为默认状态。这是为什么?

我希望只有onResume()被调用,因为我在Manifest中有这个:

android:launchMode="singleInstance"

3 个答案:

答案 0 :(得分:2)

尝试使用moveTaskToBack(true);中的onBackPressed()隐藏当前活动而不是销毁,这样您就可以重新打开它了

@Override
public void onBackPresses(){
   moveTaskToBack(true);
}

答案 1 :(得分:1)

  

我启动主要活动,在UI中更改一些设置,按后退按钮,然后重新打开活动。再次调用onCreate()并将活动恢复为默认状态。这是为什么?

这是活动生命周期的预期行为。当您按下后退按钮然后活动被销毁时,它将从onCreate方法开始。

enter image description here

答案 2 :(得分:1)

这是因为当您按下时,它会破坏活动。 我认为你想要的是在你回到这个活动时保持状态,而不是真的有一个实例。因此,您应该保存所需的信息,然后在onCreate中恢复它们。

单个实例仅意味着(如果我记得很清楚)如果你在没有完成它们的情况下启动多个活动,那么具有singleInstance的活动将在你调用startActivity()时返回到前面,并且不会调用onCreate。但这意味着你不能通过按下来获得这种行为。 也许你可以覆盖onBackPressed并启动另一个活动(你应该回去的那个),而不是调用super.onBackPressed()。这应该做你想要的,但如果认为它将难以管理。

顺便提一下,记住活动可能会被系统本身杀死,所以你不应该依赖你的活动没有被杀死的事实