屏幕旋转后Activity生命周期
2019-03-12 本文已影响21人
糖葫芦_倩倩
主要针对屏幕旋转对 Activity 生命周期有何影响。
第一种情况
在没有其它配置的情况下,通过日志打印屏幕旋转会调用的方法。
onPause()----onStop()-----onDestroy()-----onCreate() ---- onStart()---onResume()
第二种情况
关于 android:configChanges
的配置,不同的值对生命周期也会有不同的影响。这个值最常用的值包括: orientation
和 keyboardHidden
, 分别用于避免因屏幕方向和可用键盘改变而导致的重启。
例如:
<activity android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden" / >
当其中一个配置发生变化时, MainActivity
不会重启。 但是会收到 onConfigurationChanged()
的调用。向此方法传递 Configuration
对象指定新设备配置。可以通过读取 Configuration
中的字段,确定新配置。然后通过更新界面中使用的资源进行适当的更改。调用此方法时,Activity 的 Resources 对象会相应的进行更新,以根据新配置返回资源,这样,就能够在系统不重启 Activity 的情况下轻松重置 UI 的元素。
但是,我的编译版本高一些,实验,发现当配置以上configChanges 还是会重启 Activity, 并且没有回调 onConfigurationChanged() 的回调
而后,开始查阅文档说明,发现:
注意: 在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