一、前言

看了一些关于切换屏幕时Activity生命周期变化的博客,初步理解了切换屏幕时的变化过程(私以为,默认情况下之所以切换横竖屏时会重新加载活动,是为了更好的用户体验哈哈)。但是因API版本号以及收集型号的不一样,这个过程都会略有不同。——————>所以我现在比较新的8.0系统下测试一番。

二、测试环境

安卓版本:android 8.0—API26
手机型号:Nexus_5X
编译环境:Android Sdudio

三、默认情况下的手机旋转(不配置android:configChanges属性)

首先是竖屏启动:



Android如何让Activity保持竖屏 android屏幕旋转 activity生命周期_竖屏


可以看到,流程为:onCreate—–>onStart—–>onResume。这根安卓以前的API启动流程一致。


再切换为横屏:



Android如何让Activity保持竖屏 android屏幕旋转 activity生命周期_竖屏_02


从图中可以看出,重新调用了一次生命活动周期。onPause——-onSaveInstanceState——-onStop——-onDestroy——–onCreate——onStart——onRestoreInstanceState——onResume


最后切换回竖屏(重点)

很多资料上说,这个过程会加载两次生命周期,然而在API26下的情况并非如此



Android如何让Activity保持竖屏 android屏幕旋转 activity生命周期_竖屏_03


这里根切换为横屏时一毛一样!只加载了一次生命周期。

四、配置android:configChanges="orientation"时生命周期变化

注意:该配置应该写在AndroidMainifest.xml的< activity 里.。



Android如何让Activity保持竖屏 android屏幕旋转 activity生命周期_屏幕旋转_04


同样的,竖屏下启动:



Android如何让Activity保持竖屏 android屏幕旋转 activity生命周期_竖屏_05


可以看到,流程为:onCreate—–>onStart—–>onResume。这根第三节的启动流程一致。


然后切换为横屏:



Android如何让Activity保持竖屏 android屏幕旋转 activity生命周期_生命周期_06


这儿并没有执行生命周期,只回调了onConfigurationChanged方法,这跟以前的API不一样,以前的是会重新加载一次活动的。


最后切换回竖屏



Android如何让Activity保持竖屏 android屏幕旋转 activity生命周期_生命周期_06


这儿也并没有执行生命周期,只回调了onConfigurationChanged方法。这跟以前的API不一样,以前的是会重新加载一次活动的。


五、配置android:configChanges="orientation|keyboardHidden"



Android如何让Activity保持竖屏 android屏幕旋转 activity生命周期_屏幕旋转_08


执行完旋转再转回竖屏后,打印信息如上,这和第四节一致,旋转屏幕时不调用生命周期。


六、配置android:configChanges="orientation|keyboardHidden|screenSize"



Android如何让Activity保持竖屏 android屏幕旋转 activity生命周期_屏幕旋转_08


执行完旋转再转回竖屏后,打印信息如上,这和第四节一致,旋转屏幕时不调用生命周期。


七、总结

在Android8.0环境下。当不设置android:configChanges属性时,旋转屏幕会进行一次生命周期循环(即重新加载一次Activity),而一旦配置了该属性后,旋转屏幕就只会调用onConfigurationChanged()方法。