请指定应用程序重置的含义。
当您按下电源按钮时,您的应用很可能会停止。这就是为什么您在停止(而不是:暂停)您的应用程序onStart()
后看到被调用的原因。
鉴于此,您描述的第三种情况真的是前两种情况的组合吗?换句话说,你如何在第三种情况下暂停你的应用程序?
更新关于您的评论:您的 Activity 被停止和您的 Activity 被破坏之间存在差异。
轮换是一种配置更改。在这种情况下,您的 Activity 将被销毁并重新创建。如果必须(取决于)通过onRetainNonConfigurationInstance()
回调和getLastNonConfigurationInstance()
方法,您可以单独处理这种情况。Android会按照这个顺序调用onPause()
, onStop()
, ,onRetainNonConfigurationInstance()
然后onDestroy()
继续调用onCreate()
etc ,同时它不会处理任何事件,这样它们就不会丢失。
最有可能的是,您的某些代码位于错误的回调中,因此在第三种情况下,某些内容没有被初始化/附加/...如果没有代码和异常,这真的很难说(如果它是异常)。
我建议您按以下步骤进行。
- 完成您对生命周期的理解并做到精确(创建、启动、重新启动、恢复、暂停、停止、销毁)
- 完成您的代码以覆盖其他生命周期回调以及日志消息(不要忘记调用超类的回调)并分析暂停、停止、旋转和组合
- 确定崩溃点
- 结合Activity生命周期分析crash涉及的对象的生命周期
当然,或者您可以在此处发布一些代码和异常。
更新 2我对 AVD 进行了测试。我观察到以下情况:
当 AVD 处于横向时,我按下电源按钮,我的应用程序接收到纵向方向的配置更改(可能是因为仅纵向方向的锁定屏幕接管)。再次按下电源并解锁 AVD,应用程序会再次收到配置更改回横向。
虽然没有解决您的问题,但它表明必须小心地将代码放在相应的回调中,因为在上述情况下,在重新创建时,仍然不会显示Activity 。
如果您更新您的问题,请给我留言。