程序在运行时,当屏幕旋转、键盘可用性改变等事件发生时,activity 会销毁再重新启动。这一过程将会导致 activity 记录的信息被销毁。
为了避免这种情况,可以配置 activity 的 configChanges 属性。当指定属性发生变化时(例如:横竖屏切换),不会重新启动 activity,而是通知程序调用 onConfigurationChanged 方法。
configChanges 的可选值如下:
mcc:国际移动用户识别码所属国家代号改变(侦测sim)
mnc:国际移动用户识别码的移动网号码改变(侦测sim)
locale:本地语言改变
touchscreen:触摸屏改变(通常不会发生)
keyboard:键盘发生改变,例如:用户使用外部的键盘
keyboardHidden:键盘可见性改变,例如:输入时键盘出现,输入后隐藏键盘
navigation:导航发生变化(通常不会发生)
screenLayout:屏幕布局发生变化
fontScale:字体比例发生变化
uiMode:用户模式发生变化
orientation:屏幕方向改变
screenSize:屏幕大小改变
smallestScreenSize:屏幕物理大小改变,例如:连接到一个外部的屏幕
设置方法如下:
<activity
android:name="MainActivity"
android:configChanges="orientation|keyboardHidden" />
当屏幕方向或键盘可见性发生改变时,调用 onConfigurationChanged 方法:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
Android 3.2(API 13)之后,在设置 activity 的android:configChanges="orientation|keyboardHidden"
后,还是一样会重新调用各个生命周期的。因为 screen size 也开始跟着设备的横竖切换而改变。所以,在 AndroidManifest.xml 里设置的 MiniSdkVersion 和 TargetSdkVersion 属性大于等于13的情况下,如果要阻止程序在运行时重新加载 activity,应设置为 android:configChanges="orientation|screenSize"