android:configChanges="orientation|keyboard|keyboardHidden"

在AndroidManifest.xml中添加上述代码的含义是表示在改变屏幕方向、弹出软件盘和隐藏软键盘时,不再去执行onCreate()方法,而是直接执行onConfigurationChanged()

如果不申明此段代码,按照Activity的生命周期,都会去执行一次onCreate()方法,而onCreate()方法通常会在显示之前做一些初始化工作。所以如果改变屏幕方向这样的操作都去执行onCreate()方法,就有可能造成重复的初始化,降低程序效率是必然的了,而且更有可能因为重复的初始化而导致数据的丢失。这是需要千万避免的

重写的onConfigurationChanged()如下:

@Override
public void onConfigurationChanged(Configuration newConfig) {
//获取屏幕方向
int orientation = newConfig.orientation;
Log.d("Debug","orientation:"+orientation);
super.onConfigurationChanged(newConfig);
}

AndroidManifest中声明Android:configChanges属性,该属性规定了我们可以在程序中捕获到的事件类型

可选属性如下:



Value

Description

“mcc“

The IMSI mobile country code (MCC) has changed — that is, a SIM hasbeen detected and updated the MCC.移动国家号码,由三位数字组成,每个国家都有自己独立的MCC,可以识别手机用户所属国家。

“mnc“

The IMSI mobile network code (MNC) has changed — that is, a SIM hasbeen detected and updated the MNC.移动网号,在一个国家或者地区中,用于区分手机用户的服务商。

“locale“

The locale has changed — for example, the user has selected a new language that text should be displayed in.用户所在地区发生变化。

“touchscreen“

The touchscreen has changed. (This should never normally happen.)

“keyboard“

The keyboard type has changed — for example, the user has plugged in an external keyboard.键盘模式发生变化,例如:用户接入外部键盘输入。

“keyboardHidden“

The keyboard accessibility has changed — for example, the user has slid the keyboard out to expose it.用户打开手机硬件键盘

“navigation“

The navigation type has changed. (This should never normally happen.)

“orientation“

The screen orientation has changed — that is, the user has rotated the device.设备旋转,横向显示和竖向显示模式切换。

“fontScale“

The font scaling factor has changed — that is, the user has selected a new global font size.全局字体大小缩放发生改变