我有一个完整的应用程序,除了我最后离开的生命周期。 事情似乎在所有情况下都很好,但是一个:
现在,显然这是我的内部代码的问题,但为了帮助我进行调试,我想了解这三个生命周期之间的区别。或者更好的是,如果第三个例子与前两个例子有多么不同。
通过调试,我看到所有三个人都这样做(我心里想,我希望是对的):
onSaveInstanceState()
onPause()
onStop()
onStart()
onResume()
是不是?或者,我是否会错过上面第三个示例中的一些生命周期步骤?
谢谢。
答案 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
。