Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 暂停和旋转时的生命周期_Android_Android Lifecycle - Fatal编程技术网

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()
等操作,同时不会处理任何事件,以免丢失

最有可能的是,您的一些代码位于错误的回调中,因此在第三种情况下,某些代码没有得到初始化/附加/。。。如果没有代码和异常(如果是异常的话),这真的很难区分

我建议你按以下步骤进行

  • 完成对生命周期的理解并做到精确(创建、启动、重新启动、恢复、暂停、停止、销毁)
  • 完成代码以使用日志消息覆盖其他生命周期回调