android - 暂停和旋转时的生命周期

标签 android android-lifecycle

我已经有了一个完整的应用程序,除了我愧疚地留在最后的生命周期之外。 一切似乎在所有情况下都运行良好,但有一个:

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

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

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

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

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

谢谢。

最佳答案

请具体说明应用重置的含义。

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

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

更新关于您的评论:您的 Activity 被停止和您的 Activity 被销毁之间是有区别的。

轮换是一种配置更改。在这种情况下,您的 Activity 将被销毁并重新创建。如果必须(视情况而定),您可以通过 onRetainNonConfigurationInstance() 回调和 getLastNonConfigurationInstance() 方法单独处理这种情况。 Android调用onPause()onStop()onRetainNonConfigurationInstance()onDestroy() 按此顺序,然后继续执行 onCreate() 等,同时它不会处理任何事件,这样它们就不会丢失。 p>

很可能,您的某些代码位于错误的回调中,因此在第三种情况下,某些内容不会被初始化/附加/...如果没有代码 异常(如果是异常)。

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

  • 完整且准确地理解生命周期(创建、启动、重新启动、恢复、暂停、停止、销毁)
  • 完成代码以覆盖其他生命周期回调以及日志消息(不要忘记调用父类(super class)的回调)并分析暂停、停止、旋转和组合
  • 确定崩溃点
  • 结合Activity生命周期分析崩溃涉及的对象的生命周期

当然,您也可以在这里发布一些代码和异常。

更新 2 我已经在 AVD 上进行了测试。我观察到以下几点:

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

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

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

关于android - 暂停和旋转时的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15242763/

相关文章:

android - 如何在文件系统中复制文件?

android - 禁用 Android WebView/WebViewClient 发起的 favicon.ico 请求

Android Google Play 服务生命周期

broadcastreceiver - 访问广播接收器中的应用程序类

java - 为 TextView 创建 switch case onClickListener

java - 如何检查一天中的时间是否介于两个时间之间?

android - 强制应用程序类关闭

androidx.appcompat.app.AppCompatActivity 没有实现 LifecycleOwner

android - Activity生命周期方法: onPostResume significance

android - 重定向到设置菜单后停止 Intent