当使用意图导航返回时,onCreate总是被调用

8
我有一个名为HomeActivity的活动,它有一个SurfaceView并显示相机预览图像。如果您开始/重新启动它,则此活动非常沉重且感觉缓慢。
因此,我进行了一些调查,并发现无论如何始终调用onCreate方法。在我看来,如果活动已经启动,这不应该发生? 文档说: 当活动首次创建时调用。这是您应该进行所有正常静态设置的地方:创建视图,将数据绑定到列表等。如果有先前冻结的状态,则此方法还为您提供了包含活动的Bundle。 始终跟随onStart()。
以下是处理返回的方法:
protected void gotoHome() {
    final Intent intent = new Intent(SomeOtherActivity.this, HomeActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
}

编辑:

这是我离开HomeActivity的方式……没有什么特别的:

final Intent i = new Intent(HomeActivity.this, SomeOtherActivity.class);
startActivity(i);

确保在从HomeActivity启动另一个Activity时不要调用finish()方法。 - Egor
你有检查HomeActivity中的onDestroy方法是否被调用了吗? - Jonathan Naguin
@JonathanNaguin 是的,它在另一个活动启动后被销毁,这是问题所在,但我该如何避免呢?这真的可能吗? - Mark
等一下,每次启动SomeOtherActivity时,它会立即销毁HomeActivity?这是在设备上还是模拟器上? - matt5784
@matt5784 是的,这就是正在发生的事情。我正在使用两个设备工作,但我也会在模拟器中尝试! - Mark
显示剩余5条评论
1个回答

15

是的,当你想要返回到HomeActivity时,你需要使用以下标志:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);

以下是Intent.FLAG_ACTIVITY_CLEAR_TOP文档中相关的部分:

在上面的示例中,当前运行的活动 B 将会通过 onNewIntent() 方法接收你启动的新意图,或者被关闭并使用新意图重新启动。如果该活动声明了其启动模式为“multiple”(默认值),并且您没有在同一意图中设置 FLAG_ACTIVITY_SINGLE_TOP 标志,则它将被关闭并重新创建;对于所有其他启动模式或设置了 FLAG_ACTIVITY_SINGLE_TOP 的情况,则此 Intent 将传递给当前实例的 onNewIntent()。


非常感谢!扪心自问,我怎么没想到这个主意呢! - Mark
有时候我真的很惊讶,你们这里能够如此迅速地得到一个有用的答案;-) 很高兴能够帮忙。 - David Wasser
嗨,David,每次我从子活动返回时,我的活动的oncreate都会被调用,你能帮我解决一下吗? - Yyy
@NancyY,请开一个新的问题并描述您的问题,发布相关代码等。在此答案下添加评论并不是引起注意的正确方式。 - David Wasser

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