Android8.0下切换横竖屏幕时Activity的生命周期。

一、前言

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

二、测试环境

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

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

首先是竖屏启动:

Android8.0下切换横竖屏幕时Activity的生命周期。
可以看到,流程为:onCreate—–>onStart—–>onResume。这根安卓以前的API启动流程一致。

再切换为横屏:

Android8.0下切换横竖屏幕时Activity的生命周期。
从图中可以看出,重新调用了一次生命活动周期。onPause——-onSaveInstanceState——-onStop——-onDestroy——–onCreate——onStart——onRestoreInstanceState——onResume

最后切换回竖屏(重点)

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

Android8.0下切换横竖屏幕时Activity的生命周期。

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

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

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

Android8.0下切换横竖屏幕时Activity的生命周期。

同样的,竖屏下启动:

Android8.0下切换横竖屏幕时Activity的生命周期。
可以看到,流程为:onCreate—–>onStart—–>onResume。这根第三节的启动流程一致。

然后切换为横屏:

Android8.0下切换横竖屏幕时Activity的生命周期。
这儿并没有执行生命周期,只回调了onConfigurationChanged方法,这跟以前的API不一样,以前的是会重新加载一次活动的。

最后切换回竖屏

Android8.0下切换横竖屏幕时Activity的生命周期。
这儿也并没有执行生命周期,只回调了onConfigurationChanged方法。这跟以前的API不一样,以前的是会重新加载一次活动的。

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

Android8.0下切换横竖屏幕时Activity的生命周期。
执行完旋转再转回竖屏后,打印信息如上,这和第四节一致,旋转屏幕时不调用生命周期。

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

Android8.0下切换横竖屏幕时Activity的生命周期。
执行完旋转再转回竖屏后,打印信息如上,这和第四节一致,旋转屏幕时不调用生命周期。

七、总结

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