2017-07-28 168 views
0

我启动主要活动,更改UI中的一些设置,按回按钮,然后重新打开活动。 onCreate()被再次调用并且活动回到默认状态。为什么是这样?singleInstance启动模式:为什么在活动结束前调用onCreate?

我希望只onResume()被称为,因为我有这样的清单:

android:launchMode="singleInstance" 
+0

按后退按钮销毁目前在前面的活动,所以当你打开它应该真的打电话onCreate。 – Enzokie

回答

1

我推出的主要活动,在UI更改了某些设置后,按返回键,然后重新打开活动。再次调用onCreate()并且活动回到默认状态。为什么是这样?

这是活动生命周期的预期行为。当你按回按钮,然后活动被破坏,它将从onCreate方法开始。

enter image description here

+0

我的不好。我想我需要重写'onBackPressed()'并询问用户是否真的想退出。否则,他应该使用主页按钮。 –

+0

@Primož'c0dehunter'Kralj是的。你可以向用户询问他是否想要返回,那么你必须重写'onBackPressed' –

1

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

单实例仅意味着(如果我记得的话),如果您启动多个活动而未完成它们,那么当您调用startActivity()并且不会调用onCreate时,具有singleInstance的实例将返回到前端。但是这意味着你不能通过按回来产生这种行为。 也许你可以重写onBackPressed,并开始另一个活动(你应该回去),而不是调用super.onBackPressed()。这应该做你想做的事情,但如果认为这将是一种难以管理。

顺便记住活动可能由系统本身被杀死,所以你不应该依赖于一个事实,即你的活动不被打死

2

尝试在onBackPressed()使用moveTaskToBack(true);,让您的当前活动隐藏的,而不是破坏,所以你可以重新打开它

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

我不知道这个方法!但是你仍然必须记住系统可以销毁这个活动,所以不要依赖它没有被销毁的事实 – liltof

相关问题