Android面试---配置改变activity不会被重建

系统的配置Configuration类;
mcc: SIM卡唯一标示IMSI(国际移动用户识别码)中的国家代码,由三位数字组成,中国为460。此项标示mcc代码发生了改变
mnc: SIM卡的唯一标示IMSI(国际移动用户识别码)中的运营商代码,由2位数字组成,中国移动TD系统为00,中国联通为01,此项标示mnc发生改变
locale:设备的本地位置发生了改变,一般指切换了系统语言。
touchscreen:触屏发生了改变
keyboard:键盘类型发生了改变,比如使用了外接键盘
keyboardHidden:键盘的可访问性发生了改变,比如用户调出了键盘
navigation:系统导航发生了改变,比如采用了轨迹导航,这个有点费解,很难发生,可以忽略它。
srceenLayout:屏幕布局发生了改变,很可能是激活了另外一个显示设备
frontScale:系统字体缩放比例发生了变化,比如用户选择了一个新字号
uiMode:用户界面模式发生了改变,比如是否开启了夜间模式(API8新加)
orientation:屏幕方向发生了改变,这个是最常用的,比如旋转了手机屏幕
sreenSize:当屏幕尺寸信息发生改变,当选装设备时,屏幕尺寸会发生改变,这个选项比较特殊,它和编译选项有关,当编译选项中的minSdkVersion 和 targetSdkVersion均低于13时,此选项不会到时Activity重启,负责Activity将重启(api13)添加
smallScreenSize:设备的物理尺寸发生改变,这个项目和屏幕的方向没关系,仅仅表示在实习的物理屏幕的尺寸发生改变的时候,比如用户切换到了外部的显示设备,这个选项和srceenSize一样,当编译选项中中的minSdkVersion和targetSdkVersion均低于13时,此选项不会导致Activity重启,负责将导致Activity重启(API13新添加)
layoutDirection:当布局发生变化,这个属性用的比较少,正常情况下无须修改布局的layoutDirection属性(API17新添加)

上面列出的项目很多,其实我们常用的就 locale、orientation 和 keyboardHidden这三项;

综上所述,在设备进行横竖屏切换时,分为如下几种情况:

如果不手动配置Activity configChanges属性,系统默认对Activity进行销毁重建操作。
API13以下,Activity configChanges属性中含有orientation即可避免Activity销毁重建。
API13及以上,Activity configChanges属性中同时含有orientation和screenSize即可避免Activity销毁重建。

(注:当前Activity产生事件弹出Toast和AlertDialog的时候Activity的生命周期不会有改变,Activity运行时按下HOME键(跟被完全覆盖是一样的):onSaveInstanceState --> onPause --> onStop,onRestart -->onStart—>onResume。Activity未被完全覆盖只是失去焦点:onPause—>onResume)

猜你喜欢

转载自blog.csdn.net/YSSY6886/article/details/89217837