Android横向界面锁屏时生命周期异常情况处理--Activity异常销毁重建

事情很简单,原本好好的一个横屏拍摄界面,当锁屏时理应执行onpause,onstop才对,结果日志一看,销毁活动重建了,再解锁又重建了一个。

其实如果是手机开启自动旋转的话这个Bug很好理解,但是问题是如果当前界面是横屏的,哪怕你在AndroidManifes的方向设置中固定了横屏选项,但是在锁屏时还是会被销毁,走横竖屏切换流程。

类似的坑还有SurfaceView,在锁屏和按home键时,虽然Activity的生命周期是一样的,但是SurfaceView不是,按锁屏键SurfaceView不会销毁,按home键SurfaceView会销毁,并且在回到界面时重建。

解决:在AndroidManifest文件对应的activity中加入android:configChanges=”screenSize|orientation”,意思是当这两个属性变化时不要重建activity,因为android默认有一个列表,当这些列表内的属性发生变化时,会默认重建activity,加了这个声明后,就不会去重启activity了,而是会调用此活动界面的onConfigurationChanged()方法。

附表如下,当此表中的任一一个值发生变化时,activity就会被重建

VALUE DESCRIPTION
“mcc” 国际移动用户识别码所属国家代号是改变了—– sim被侦测到了,去更新mcc mcc是移动用户所属国家代号
“mnc” 国际移动用户识别码的移动网号码是改变了—— sim被侦测到了,去更新mnc MNC是移动网号码,最多由两位数字组成,用于识别移动用户所归属的移动通信网
“locale” 地址改变了—–用户选择了一个新的语言会显示出来
“touchscreen” 触摸屏是改变了——通常是不会发生的
“keyboard” 键盘发生了改变—-例如用户用了外部的键盘
“keyboardHidden” 键盘的可用性发生了改变
“navigation” 导航发生了变化—–通常也不会发生
“screenLayout” 屏幕的显示发生了变化——不同的显示被激活
“fontScale” 字体比例发生了变化—-选择了不同的全局字体
“uiMode” 用户的模式发生了变化
“orientation” 屏幕方向改变了
“screenSize” 屏幕大小改变了
“smallestScreenSize” 屏幕的物理大小改变了,如:连接到一个外部的屏幕上

你可能感兴趣的:(Android积累)