调用startActivity()后不要调用父Activity的onDestroy()方法?

4

我有一个包含大量片段事务的Activity,有时我的用户需要打开偏好设置Activity几秒钟。我像这样做:

Intent preferencesIntent = new Intent(this, PreferencesView.class);     
this.startActivity(preferencesIntent);

每次我这样做时,我的主Activity的onDestroy()方法被调用。因此,当用户返回时,主Activity处于初始状态。但是我希望主Activity像他们离开时一样。
我知道我应该保存/恢复我的数据并让Activity重新创建自己。但这将非常复杂,而且我的用户大部分时间都在我的主Activity中。
所以有没有办法告诉Android在它不可见时不要杀死我的主Activity?
提前感谢!

在你的情况下,使用startActivityForResult(intent);而不是简单的startActivity(intent)。 - Abhinav Singh Maurya
你在使用什么设备?除非内存非常小,否则系统不应该杀死你的第一个活动。 - FoamyGuy
@FoamyGuy 我正在使用 Nexus 7。它有1GB的内存,我几乎没有打开任何应用程序。 - NLemay
@AbhinavSinghMaurya 谢谢你。但我已经尝试过这个方法了,我的父Activity仍然在调用onDestroy()。 - NLemay
请发布您的onPause和onStop方法代码。您描述的行为对于系统来说并不正常。很可能是您在活动中添加的某些内容导致了您所见到的行为。 - FoamyGuy
我的onPause、onStop和onDestroy中没有代码。因此,它正在使用FragmentActivity的super()。 - NLemay
2个回答

2

您已经写出了答案:保存/恢复状态。这就是Android的工作方式。

您的活动可能会因配置更改或其他原因而被销毁。


如果我没有选择,我会这样做。但是,仅为了一个非常特定的情况而烦恼似乎有点太麻烦了。此外,重新加载所有我的数据可能需要几秒钟的时间。我不太喜欢它为我的用户提供的用户体验。 - NLemay
1
你可以使用 setRetainInstance() 方法将所有大数据存储在片段(Fragment)中,而不是在视图中。这将在配置更改时保存片段实例。这可能看起来有些复杂,但一旦学会了如何做,就会自动执行。 - Korniltsev Anatoly

1
你无法阻止Android停止一个Activity。我唯一能想到的方法是在主Activity中的Fragment中加载偏好设置。

问题是我还在使用选项卡,而且必须始终选择一个选项卡。偏好设置不适合任何一个选项卡,这会导致奇怪的导航。 - NLemay

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