暂停和旋转时的生命周期

时间:2013-03-06 08:53:49

标签: android android-lifecycle

我有一个完整的应用程序,除了我最后离开的生命周期。 事情似乎在所有情况下都很好,但是一个:

  • 当我按下电源按钮暂停应用时,它会在恢复时正确暂停并重新启动。
  • 当我旋转屏幕时,它会正确调整大小。
  • 当我暂停并然后旋转屏幕时,其行为会有所不同,应用会重置。

现在,显然这是我的内部代码的问题,但为了帮助我进行调试,我想了解这三个生命周期之间的区别。或者更好的是,如果第三个例子与前两个例子有多么不同。

通过调试,我看到所有三个人都这样做(我心里想,我希望是对的):

  • onSaveInstanceState()
  • onPause()
  • onStop()
  • onStart()
  • onResume()

是不是?或者,我是否会错过上面第三个示例中的一些生命周期步骤?

谢谢。

3 个答案:

答案 0 :(得分:3)

请指定应用重置的含义。

当您按下电源按钮时,很可能您的应用停止。这就是为什么您在停止(而不是暂停)应用后看到onStart()被调用的原因。

鉴于此,您描述的第三种情况是否真的是前两种情况的组合?换句话说,您如何在第三种情况下暂停您的应用程序?

更新关于您的评论:您的已停止的活动与已销毁的活动之间存在差异。

轮换是配置更改。在这种情况下,您的活动将被销毁并重新创建。如果您必须(通过onRetainNonConfigurationInstance()回调和getLastNonConfigurationInstance()方法(取决于),您可以单独处理此案例。 Android 按此顺序呼叫onPause()onStop()onRetainNonConfigurationInstance()onDestroy(),然后继续使用onCreate()等,它将会在此期间处理任何事件,以免他们迷路。

最有可能的是,你的一些代码位于错误的回调中,这样在第三种情况下,某些内容无法初始化/附加/ ...如果没有代码异常(如果是例外)。

我建议您按照以下步骤进行操作。

  • 完成您对生命周期的理解并准确(创建,开始,重启,恢复,暂停,停止,销毁)
  • 完成代码以覆盖其他生命周期回调以及日志消息(不要忘记调用超类'回调)并分析暂停,停止,旋转和组合
  • 确定崩溃点
  • 结合“活动生命周期”
  • 分析崩溃中涉及的对象的生命周期

或者你可以在这里发布一些代码和例外。

更新2 我在AVD上做过测试。我观察到以下情况:

当AVD处于横向时,我按下电源按钮,我的应用程序会收到配置更改为纵向(可能是因为仅限纵向锁定屏幕接管)。再次按下电源并解锁AVD,应用程序再次接收配置更改回横向。

虽然没有解决您的问题,但它表明代码必须小心地放在相应的回调中,因为在上面的情况下,在重新创建时,活动仍然不会显示

如果您更新问题,请发表评论。

答案 1 :(得分:1)

您好,您可以查看关于在Android中管理活动生命周期的 documentation

答案 2 :(得分:0)

当方向更改时,将重新创建活动。

android:configChanges="keyboardHidden|orientation"添加到清单中的activity