资讯专栏INFORMATION COLUMN

Android横竖屏切换的生命周期

youkede / 2018人阅读

摘要:关于手机横竖屏切换时的生命周期问题,网上有很多相似的文章,大多数都是说明在竖屏切换横屏时会重启一次,而在横屏切换竖屏时会重启两次。

关于Android手机横竖屏切换时Activity的生命周期问题,网上有很多相似的文章,大多数都是说明在竖屏切换横屏时Activity会重启一次,而在横屏切换竖屏时Activity会重启两次。

我本身不太理解这样设计的意义,并且觉得新版本会解决这个问题,所以做了一项测试,测试环境为Android 7.0模拟器。

测试首先创建一个新的Activity,并在其各个生命周期方法内打印日志,并执行如下操作得到结果:

targetSdkVersion的值大于12时

Activity启动

I/System.out: onCreate
I/System.out: onStart
I/System.out: onResume

竖屏切换为横屏

I/System.out: onConfigurationChanged
I/System.out: onPause
I/System.out: onSaveInstanceState
I/System.out: onStop
I/System.out: onDestroy
I/System.out: onCreate
I/System.out: onStart
I/System.out: onRestoreInstanceState
I/System.out: onResume

横屏切回竖屏

I/System.out: onConfigurationChanged
I/System.out: onPause
I/System.out: onSaveInstanceState
I/System.out: onStop
I/System.out: onDestroy
I/System.out: onCreate
I/System.out: onStart
I/System.out: onRestoreInstanceState
I/System.out: onResume

配置android:configChanges="orientation|screenSize"后,竖屏切换为横屏

I/System.out: onConfigurationChanged

配置android:configChanges="orientation|screenSize"后,横屏切回竖屏

I/System.out: onConfigurationChanged

targetSdkVersion的值小于或等于12时

Activity启动

I/System.out: onCreate
I/System.out: onStart
I/System.out: onResume

竖屏切换为横屏

I/System.out: onConfigurationChanged
I/System.out: onPause
I/System.out: onSaveInstanceState
I/System.out: onStop
I/System.out: onDestroy
I/System.out: onCreate
I/System.out: onStart
I/System.out: onRestoreInstanceState
I/System.out: onResume

横屏切回竖屏

I/System.out: onConfigurationChanged
I/System.out: onPause
I/System.out: onSaveInstanceState
I/System.out: onStop
I/System.out: onDestroy
I/System.out: onCreate
I/System.out: onStart
I/System.out: onRestoreInstanceState
I/System.out: onResume

配置android:configChanges="orientation"后,竖屏切换为横屏

I/System.out: onConfigurationChanged

配置android:configChanges="orientation"后,横屏切回竖屏

I/System.out: onConfigurationChanged

总结

可以发现新版本Android设备上的运行结果和网上的结论并不完全相同,在横竖屏切换时,都会调用一次onConfigurationChanged,并重启Activity一次,具体的生命周期为:

I/System.out: onConfigurationChanged
I/System.out: onPause
I/System.out: onSaveInstanceState
I/System.out: onStop
I/System.out: onDestroy
I/System.out: onCreate
I/System.out: onStart
I/System.out: onRestoreInstanceState
I/System.out: onResume

targetSdkVersion的值小于或等于12时,配置android:configChanges="orientation"
targetSdkVersion的值小于或等于12时,配置android:configChanges="orientation|screenSize"
可以做到拦截Activity的重新创建:

I/System.out: onConfigurationChanged
后续

将会对过去版本的Android设备做相应的测试,来验证得到结果。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/13195.html

相关文章

  • 粮草先行——Android折叠开发技术点番外篇之运行时变更处理原则

    摘要:上一篇文章中,我们有提到在屏幕尺寸发生变更时的处理方式,总共有两种重启以适应屏幕改变手动处理数据,避免重启。因此,本文也同样适用于改变屏幕方向等情况的处理。上一篇文章中,我们有提到Activity在屏幕尺寸发生变更时的处理方式,总共有两种: 重启APP以适应屏幕改变; 手动处理数据,避免APP重启。 同样,这两种方式也同时适用于改变屏幕方向、更改系统语言、甚至输入法等等。 因此,本文也同...

    fuchenxuan 评论0 收藏0
  • Android开发艺术探索--Activity

    摘要:的控制又来控制一个栈和其状态。但是当变化发生的时候,将会有一个回调函数被执行。。前一个仍然保留在返回栈当中,但会处于停止状态。 接下来根据自己的平时的学习和自己最近要读的两本书《android开发艺术探索》和《android群英传》来梳理记录下自己的学习过程和对于遇到问题如何处理解决,还有将会陆续下一些有关关于如何将Java代码写的更优雅的,结合自己读过的书来做个记录整理型的系列博客。...

    ephererid 评论0 收藏0
  • Android开发艺术探索--Activity

    摘要:的控制又来控制一个栈和其状态。但是当变化发生的时候,将会有一个回调函数被执行。。前一个仍然保留在返回栈当中,但会处于停止状态。 接下来根据自己的平时的学习和自己最近要读的两本书《android开发艺术探索》和《android群英传》来梳理记录下自己的学习过程和对于遇到问题如何处理解决,还有将会陆续下一些有关关于如何将Java代码写的更优雅的,结合自己读过的书来做个记录整理型的系列博客。...

    wushuiyong 评论0 收藏0
  • 2019 Android 高级面试题总结

    摘要:子线程往消息队列发送消息,并且往管道文件写数据,主线程即被唤醒,从管道文件读取数据,主线程被唤醒只是为了读取消息,当消息读取完毕,再次睡眠。因此的循环并不会对性能有过多的消耗。 说下你所知道的设计模式与使用场景 a.建造者模式: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 使用场景比如最常见的AlertDialog,拿我们开发过程中举例,比如Camera...

    YorkChen 评论0 收藏0
  • 2019 Android 高级面试题总结

    摘要:子线程往消息队列发送消息,并且往管道文件写数据,主线程即被唤醒,从管道文件读取数据,主线程被唤醒只是为了读取消息,当消息读取完毕,再次睡眠。因此的循环并不会对性能有过多的消耗。 说下你所知道的设计模式与使用场景 a.建造者模式: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 使用场景比如最常见的AlertDialog,拿我们开发过程中举例,比如Camera...

    wums 评论0 收藏0

发表评论

0条评论

youkede

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<