【问题标题】:onCreate always called if navigating back with intent如果有意导航返回,则始终调用 onCreate
【发布时间】:2012-07-06 00:35:29
【问题描述】:

我有一个名为 HomeActivity 的活动,它有一个 SurfaceView 并显示一个相机预览图片。此活动很安静,如果您正在启动/重新启动它会感觉很慢。

所以我进行了一些调查并发现,总是以某种方式调用 onCreate 方法。在我看来,如果活动已经开始,这不应该发生?

documentation 说: 在第一次创建活动时调用。这是您应该进行所有常规静态设置的地方:创建视图、将数据绑定到列表等。此方法还为您提供了一个包含活动先前冻结状态的 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 时没有完成() HomeActivity。
  • onCreat() 在您使用方法gotoHome()返回时调用?
  • @Egor 我没有调用finish()
  • 你检查过 HomeActivity 的 onDestroy 方法是否被调用了吗?
  • @JonathanNaguin 是的,它在其他活动开始后被销毁,这是问题,但我该如何避免这种情况?真的可以吗?

标签: android back-stack activity-stack


【解决方案1】:

是的,当你想返回 HomeActivity 时,你需要使用这些标志:

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

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

上例中当前正在运行的活动 B 实例将 要么接收您从这里开始的新意图 onNewIntent() 方法,或者自己完成并使用新的重新启动 意图。如果它已将其启动模式声明为“多重”( 默认值)并且您没有设置 FLAG_ACTIVITY_SINGLE_TOP 相同 意图,然后它将完成并重新创建;对于所有其他发射 模式或者如果设置了 FLAG_ACTIVITY_SINGLE_TOP 那么这个 Intent 将是 传递到当前实例的 onNewIntent()。

【讨论】:

  • 非常感谢! Facepalm...自己能有这个想法!
  • 有时让我吃惊的是你能多快在这里得到有用的答案 ;-) 很高兴能提供帮助。
  • 嗨大卫,我的活动的 oncreate 每次我从其子活动返回时都会被调用,你能帮我吗?
  • @NancyY 请打开一个新问题并描述您的问题,发布相关代码等。在此答案中添加评论不是引起注意的正确方式。
猜你喜欢
  • 2021-12-17
  • 1970-01-01
  • 2011-09-25
  • 2023-04-08
  • 2015-07-03
  • 2021-08-03
  • 1970-01-01
  • 2016-03-30
  • 1970-01-01
相关资源
最近更新 更多