Activity在系统配置发生改变之后会重新创建,例如:手机旋转屏幕时Activity就会被重建。
那么怎样才能让Activity不被创建呢?
其实系统的配置在Configuration类中(package android.content.res;)实现了Parcelable,和Comparable<Configuration>;
/** @hide */
public static String configurationDiffToString(int diff) {
ArrayList list =new ArrayList<>();
if ((diff & ActivityInfo.CONFIG_MCC) !=0) {
list.add("CONFIG_MCC");
}
if ((diff & ActivityInfo.CONFIG_MNC) !=0) {
list.add("CONFIG_MNC");
}
if ((diff & ActivityInfo.CONFIG_LOCALE) !=0) {
list.add("CONFIG_LOCALE");
}
if ((diff & ActivityInfo.CONFIG_TOUCHSCREEN) !=0) {
list.add("CONFIG_TOUCHSCREEN");
}
if ((diff & ActivityInfo.CONFIG_KEYBOARD) !=0) {
list.add("CONFIG_KEYBOARD");
}
if ((diff & ActivityInfo.CONFIG_KEYBOARD_HIDDEN) !=0) {
list.add("CONFIG_KEYBOARD_HIDDEN");
}
if ((diff & ActivityInfo.CONFIG_NAVIGATION) !=0) {
list.add("CONFIG_NAVIGATION");
}
if ((diff & ActivityInfo.CONFIG_ORIENTATION) !=0) {
list.add("CONFIG_ORIENTATION");
}
if ((diff & ActivityInfo.CONFIG_SCREEN_LAYOUT) !=0) {
list.add("CONFIG_SCREEN_LAYOUT");
}
if ((diff & ActivityInfo.CONFIG_COLOR_MODE) !=0) {
list.add("CONFIG_COLOR_MODE");
}
if ((diff & ActivityInfo.CONFIG_UI_MODE) !=0) {
list.add("CONFIG_UI_MODE");
}
if ((diff & ActivityInfo.CONFIG_SCREEN_SIZE) !=0) {
list.add("CONFIG_SCREEN_SIZE");
}
if ((diff & ActivityInfo.CONFIG_SMALLEST_SCREEN_SIZE) !=0) {
list.add("CONFIG_SMALLEST_SCREEN_SIZE");
}
if ((diff & ActivityInfo.CONFIG_LAYOUT_DIRECTION) !=0) {
list.add("CONFIG_LAYOUT_DIRECTION");
}
if ((diff & ActivityInfo.CONFIG_FONT_SCALE) !=0) {
list.add("CONFIG_FONT_SCALE");
}
if ((diff & ActivityInfo.CONFIG_ASSETS_PATHS) !=0) {
list.add("CONFIG_ASSETS_PATHS");
}
StringBuilder builder =new StringBuilder("{");
for (int i =0, n = list.size(); i < n; i++) {
builder.append(list.get(i));
if (i != n -1) {
builder.append(", ");
}
}
builder.append("}");
return builder.toString();
}
1、CONFIG_MCC:SIM卡唯一标示IMSI(国际移动用户识别码)中的国家代码,由三位数字组成,中国为460。此项标示mcc代码发生了改变
2、CONFIG_MNC:SIM卡的唯一标示IMSI(国际移动用户识别码)中的运营商代码,由2位数字组成,中国移动TD系统为00,中国联通为01,此项标示mnc发生改变
3、CONFIG_LOCALE:设备的本地位置发生了改变,一般指切换了系统语言。
4、CONFIG_TOUCHSCREEN:触屏发生了改变
5、CONFIG_KEYBOARD:键盘类型发生了改变,比如使用了外接键盘
6、CONFIG_KEYBOARD_HIDDEN:键盘的可访问性发生了改变,比如用户隐藏键盘
7、CONFIG_NAVIGATION:系统导航发生了改变(不是太懂)
8、CONFIG_SCREEN_LAYOUT:屏幕布局发生了改变,很可能是激活了另外一个显示设备
9、CONFIG_ORIENTATION:屏幕方向发生了变化
10、CONFIG_SCREEN_SIZE当屏幕尺寸信息发生改变,当选装设备时,屏幕尺寸会发生改变,这个选项比较特殊,它和编译选项有关,当编译选项中的minSdkVersion 和 targetSdkVersion均低于13时,此选项不会到时Activity重启,负责Activity将重启(api13)添加:
11、CONFIG_FONT_SCALE:系统字体缩放比例发生了变化,比如用户选择了一个新字号
12、CONFIG_SMALLEST_SCREEN_SIZE:设备的物理尺寸发生改变,这个项目和屏幕的方向没关系,仅仅表示在实习的物理屏幕的尺寸发生改变的时候,比如用户切换到了外部的显示设备,这个选项和srceenSize一样,当编译选项中中的minSdkVersion和targetSdkVersion均低于13时,此选项不会导致Activity重启,负责将导致Activity重启(API13新添加)
13、CONFIG_LAYOUT_DIRECTION:当布局发生变化,这个属性用的比较少,正常情况下无须修改布局的layoutDirection属性(API17新添加)
上面列出的项目很多,其实我们常用的就 locale、orientation 和 keyboardHidden这三项。
当屏幕发生改变时,例如:手机旋转屏幕时 Activity不被创建
在AndroidManifest.xml文件中添加 android:configChanges="orientation|screenSize"
![](https://img.haomeiwen.com/i4952157/490e196443dec49f.png)
这样手机在旋转屏幕时 Activity就不会被创建了
网友评论