【问题标题】:singleInstance launch mode: why is onCreate called after activity is brought to front?单实例启动模式:为什么在活动被带到前面之后调用 onCreate?
【发布时间】:2017-07-28 10:26:57
【问题描述】:

我启动主要活动,更改 UI 中的一些设置,按下返回按钮,然后重新打开活动。 onCreate() 再次被调用并且活动回到默认状态。这是为什么呢?

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

android:launchMode="singleInstance"

【问题讨论】:

  • 按下后退按钮会破坏当前前面的活动,所以当你打开它时应该真正调用 onCreate。

标签: android android-activity activity-lifecycle


【解决方案1】:

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

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

【讨论】:

  • 我不知道这个方法!但是你还是要记住,activity可以被系统销毁,所以不要依赖它没有被销毁的事实
【解决方案2】:

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

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

【讨论】:

  • 我的错。我想我需要覆盖onBackPressed() 并询问用户是否真的想退出。否则他应该使用主页按钮。
  • @Primož'c0dehunter'Kralj 是的。您可以询问用户是否要返回,然后您必须覆盖 onBackPressed
【解决方案3】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多