2013-06-20 28 views
0

在回答这里关于when onDestroy is called的问题时,出现了Android文档中出现不一致的地方。重新生成生命周期方法和返回键

根据有关task and backstack

android的文档“当用户按下后退按钮,当前的活动是从堆栈的顶部(活性被破坏)和前 活动弹出 恢复(其UI以前的状态恢复)。“

但在同一时间,the android lifecycle表明,活动不会自动销毁,而是暂停,如果UI部分隐藏,停止如果UI完全隐藏,并且仅在系统资源不足时销毁。

这是两个相反的位置。所以我的问题是 - 这是什么?

大声呼吁@Raghunandan在一段时间内与我一起来回踱步。希望我们能得到答案。

回答

0

这两种说法没有矛盾。当您按下BACK,除非你重写onBackPressed不要叫finish()或做覆盖finish而不是调用super.finish()的一个奇怪的东西

onDestroy被调用。

如果您不停止呼叫Activity.finishonDestroy总是呼叫。

其他声明说一无所知逼人退,我可以链接下找到无处你在这里提供的

和销毁只有如果系统资源不足。

Additinally到onDestroy被调用时,应用程序资源不足(这奇怪的是没有我的手机上发生的;我得到OOM)它被称为当其他20个活动在全球范围(从所有的应用程序)这一项后启动。

我也鼓励你再次检查yet another answer on when onDestroy is called的真正原因onDestroy没有被调用。

+0

对于我所链接的问题问题,你可能是正确的。但是,如果在每次后退按下时总是自动调用destroy,则不需要'onRestart'方法。更好的是,如果应用程序只从活动状态进展到销毁状态,为什么还要有生命周期方法?如果你说的是真的,那么只有2种必需的方法 - onCreate和onDestroy。 – Rarw

+0

@Rarw我建议[阅读更多'活动'生命周期](http://developer.android.com/training/basics/activity-lifecycle/starting.html#lifecycle-states)。活动在屏幕熄灭或另一个透明的“活动”放在它的前面时暂停。当您按下HOME或另一个不透明的“活动”放在堆栈上时,活动会停止。 BACK按钮并不是唯一可以调用生命周期方法的方法。 –

+0

我不是在暗示返回是调用生命周期方法的唯一方法。我知道他们可以多次拨打电话,例如,如果您打电话或从屏幕顶部拉下菜单。但是我也不同意这个想法,即每次按下back时都会调用onDestroy。只要看看按下后退按钮时活动的行为。如果我一直回到家中,我的应用仍然保留在后台。如果所有的活动都是在后面立即销毁的话,情况就不会如此。您必须每次都从onCreate重新启动。 – Rarw

1

他们在他们的语境中都是正确的。也许生命周期应该说“只有在系统资源不足时销毁它会从堆栈中弹出”。

考虑这个例子。开始时你有活性的,然后开始从一个活动B,然后从B.

  • 启动活性C现在A和B都被暂停和停止,但不被破坏
  • 如果C在资源上很重,A或B可能会被销毁。

现在按后退按钮从活动C,你又回到了活动B

  • 活动C被暂停,停止和破坏

现在,再次按后退按钮,你又回到了活动A

  • 活动B暂停,停止,破坏

系统试图让所有的活动情况等等他们可以很快重新打开。但是当一个活动从栈中弹出时,用户将来无法重新打开它们,至少不是同一个实例。