一、前言
看了一些关于切换屏幕时Activity生命周期变化的博客,初步理解了切换屏幕时的变化过程(私以为,默认情况下之所以切换横竖屏时会重新加载活动,是为了更好的用户体验哈哈)。但是因API版本号以及收集型号的不一样,这个过程都会略有不同。——————>所以我现在比较新的8.0系统下测试一番。
二、测试环境
安卓版本:android 8.0—API26
手机型号:Nexus_5X
编译环境:Android Sdudio
三、默认情况下的手机旋转(不配置android:configChanges属性)
首先是竖屏启动:
可以看到,流程为:onCreate—–>onStart—–>onResume。这根安卓以前的API启动流程一致。
再切换为横屏:
从图中可以看出,重新调用了一次生命活动周期。onPause——-onSaveInstanceState——-onStop——-onDestroy——–onCreate——onStart——onRestoreInstanceState——onResume
最后切换回竖屏(重点)
很多资料上说,这个过程会加载两次生命周期,然而在API26下的情况并非如此:
这里根切换为横屏时一毛一样!只加载了一次生命周期。
四、配置android:configChanges="orientation"
时生命周期变化
注意:该配置应该写在AndroidMainifest.xml的< activity 里.。
同样的,竖屏下启动:
可以看到,流程为:onCreate—–>onStart—–>onResume。这根第三节的启动流程一致。
然后切换为横屏:
这儿并没有执行生命周期,只回调了onConfigurationChanged方法,这跟以前的API不一样,以前的是会重新加载一次活动的。
最后切换回竖屏
这儿也并没有执行生命周期,只回调了onConfigurationChanged方法。这跟以前的API不一样,以前的是会重新加载一次活动的。
五、配置android:configChanges="orientation|keyboardHidden"
后
执行完旋转再转回竖屏后,打印信息如上,这和第四节一致,旋转屏幕时不调用生命周期。
六、配置android:configChanges="orientation|keyboardHidden|screenSize"
执行完旋转再转回竖屏后,打印信息如上,这和第四节一致,旋转屏幕时不调用生命周期。
七、总结
在Android8.0环境下。当不设置android:configChanges
属性时,旋转屏幕会进行一次生命周期循环(即重新加载一次Activity),而一旦配置了该属性后,旋转屏幕就只会调用onConfigurationChanged()
方法。