主要针对屏幕旋转对 Activity 生命周期有何影响。java
在没有其它配置的状况下,经过日志打印屏幕旋转会调用的方法。android
//onPause()----onStop()-----onDestroy()-----onCreate() ---- onStart()---onResume()
复制代码
关于 android:configChanges
的配置,不一样的值对生命周期也会有不一样的影响。这个值最经常使用的值包括: orientation
和 keyboardHidden
, 分别用于避免因屏幕方向和可用键盘改变而致使的重启。ide
例如:ui
<activity android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden" / >
复制代码
当其中一个配置发生变化时, MainActivity
不会重启。 可是会收到 onConfigurationChanged()
的调用。向此方法传递 Configuration
对象指定新设备配置。能够经过读取 Configuration
中的字段,肯定新配置。而后经过更新界面中使用的资源进行适当的更改。调用此方法时,Activity 的 Resources 对象会相应的进行更新,以根据新配置返回资源,这样,就可以在系统不重启 Activity 的状况下轻松重置 UI 的元素。spa
可是,个人编译版本高一些,实验,发现当配置以上configChanges 仍是会重启 Activity, 而且没有回调 onConfigurationChanged() 的回调日志
然后,开始查阅文档说明,发现:code
注意: 在Android3.2(API 13)开始,当设备在纵向和横向之间切换时, “屏幕尺寸”也会发生改变,所以,在开发针对 API 13或者更高版本的应用时(固然咱们如今基本都是4.0 以上),若要避免因为设备方向改变而致使运行时重启,则除了 "orientation" 值之外,还必须添加 "screenSize" 值, 也就是说,您必须声明:android:configChanges="orientation|screenSize".
复制代码
当添加新的配置 screenSize
以后,屏幕旋转回调以下:对象
// onConfigurationChanged invoked... 只会调用onConfigurationChanged() 方法,并无重启
复制代码
最后就是一些资源的变动,若是有些图像应该在横向和纵向之间切换,就必须在 onConfigurationChanged() 期间将每一个资源从新分配给每一个元素。生命周期
文档地址:https://developer.android.com/guide/topics/resources/runtime-changes?hl=zh-cn资源