Android 暂停和旋转时的生命周期
我已经有了一个完整的应用程序,除了生命周期之外,很内疚地,我最后离开了。 在所有情况下,情况似乎都很好,但有一个例外:Android 暂停和旋转时的生命周期,android,android-lifecycle,Android,Android Lifecycle,我已经有了一个完整的应用程序,除了生命周期之外,很内疚地,我最后离开了。 在所有情况下,情况似乎都很好,但有一个例外: 当我按下电源按钮暂停应用程序时,它会在恢复时正确暂停并重新启动 当我旋转屏幕时,它会正确调整大小 当我暂停然后旋转屏幕时,它的行为不同,应用程序会重置 现在,显然这是我的内部代码的问题,但是为了帮助我进行调试,我想了解三个生命周期之间的区别。或者更好,如果第三个例子与前两个不同 通过调试,我发现这三种方法都能做到(我的想法类似,我希望是正确的): onSaveInstan
- 当我按下电源按钮暂停应用程序时,它会在恢复时正确暂停并重新启动
- 当我旋转屏幕时,它会正确调整大小
- 当我暂停然后旋转屏幕时,它的行为不同,应用程序会重置
onSaveInstanceState()
onPause()
onStop()
onStart()
onResume()
谢谢。您好,您可以查看有关管理android中的活动生命周期的。您好,您可以查看有关管理android中的活动生命周期的。当重新创建定向更改活动时
将
android:configChanges=“keyboardHidden | orientation”
添加到清单中的活动中 方向改变时,将重新创建活动
将android:configChanges=“keyboardHidden | orientation”
添加到清单中的活动中 请指定应用重置的含义
当你按下电源按钮时,你的应用程序很可能会停止。这就是为什么停止(而不是暂停)应用程序后会调用onStart()
鉴于此,您所描述的第三个场景是否真的是前两个场景的组合?换句话说,在第三种情况下,如何暂停应用程序
更新关于您的评论:您的活动被停止与您的活动被销毁之间存在差异
旋转是一种配置更改。在此场景中,您的活动将被销毁并重新创建。如果必须(视情况而定)通过onretainonconfigurationinstance()
回调和getLastNonConfigurationInstance()
方法单独处理此情况。Android将按此顺序调用onPause()
、onStop()
、onretainonconfigurationinstance()
和onDestroy()
等,然后继续执行onCreate()
等操作,同时不会处理任何事件,以免丢失
最有可能的是,您的一些代码位于错误的回调中,因此在第三种情况下,某些代码没有得到初始化/附加/。。。如果没有代码和异常(如果是异常的话),这真的很难区分
我建议你按以下步骤进行
- 完成对生命周期的理解并做到精确(创建、启动、重新启动、恢复、暂停、停止、销毁)
- 完成您的代码,用日志消息覆盖其他生命周期回调(不要忘记调用超级类的回调),并分析暂停、停止、旋转和组合
- 确定坠机地点
- 结合活动生命周期分析崩溃中涉及的对象的生命周期
当然,你也可以在这里发布一些代码和异常
更新2我对AVD进行了测试。我观察到以下情况:
当AVD处于横向时,我按下电源按钮,我的应用程序接收到纵向的配置更改(可能是因为只有纵向锁定屏幕才起作用)。再次按下电源并解锁AVD,应用程序将再次收到配置更改,返回横向方向
虽然没有解决您的问题,但它表明必须小心地将代码放置在相应的回调中,因为在上述情况下,在重新创建时,活动仍然不会显示
如果您更新了您的问题,请给我留言。请指定应用重置的含义
当你按下电源按钮时,你的应用程序很可能会停止。这就是为什么停止(而不是暂停)应用程序后会调用onStart()
鉴于此,您所描述的第三个场景是否真的是前两个场景的组合?换句话说,在第三种情况下,如何暂停应用程序
更新关于您的评论:您的活动被停止与您的活动被销毁之间存在差异
旋转是一种配置更改。在此场景中,您的活动将被销毁并重新创建。如果必须(视情况而定)通过onretainonconfigurationinstance()
回调和getLastNonConfigurationInstance()
方法单独处理此情况。Android将按此顺序调用onPause()
、onStop()
、onretainonconfigurationinstance()
和onDestroy()
等,然后继续执行onCreate()
等操作,同时不会处理任何事件,以免丢失
最有可能的是,您的一些代码位于错误的回调中,因此在第三种情况下,某些代码没有得到初始化/附加/。。。如果没有代码和异常(如果是异常的话),这真的很难区分
我建议你按以下步骤进行
- 完成对生命周期的理解并做到精确(创建、启动、重新启动、恢复、暂停、停止、销毁)
- 完成代码以使用日志消息覆盖其他生命周期回调