android:configChanges配置不当,应用被回收重启,导致应用崩溃

游戏中调起支付宝支付后(相当与切换应用进程,使原应用调回后台运行),没有支付,直接返回(相当于重启原应用),然后游戏就闪退了,没有看到明显的错误日志,只看到应用被回收相关日志,观察生命周期运行情况如下图:

 

 

后来发现是由于android:configChanges配置不当,应用被回收重启,导致应用崩溃的,android:configChanges配置的作用是阻止应用在某些情况下不容许被系统回收重启

 

 

android:configChanges配置的相关值如下表:

属性值

含义

mcc

SIM卡唯一标识IMSI(国际移动用户标识码)中的国家代码,由三位数字组成,中国为:460 这里标识mcc代码发生了改变

mnc

 

SIM卡唯一标识IMSI(国际移动用户标识码)中的运营商代码,有两位数字组成,中国移动TD系统为00,中国联通为01,电信为03,此项标识mnc发生了改变

locale

设备的本地位置发生了改变,一般指的是切换了系统语言

touchscreen

触摸屏发生了改变

keyboard

键盘类型发生了改变,比如用户使用了外接键盘

keyboardHidden

键盘的可访问性发生了改变,比如用户调出了键盘

navigation

系统导航方式发生了改变

screenLayout

屏幕布局发生了改变,很可能是用户激活了另外一个显示设备

fontScale

系统字体缩放比例发生了改变,比如用户选择了个新的字号

uiMode

用户界面模式发生了改变,比如开启夜间模式-API8新添加

orientation

屏幕方向发生改变,比如旋转了手机屏幕

screenSize

当屏幕尺寸信息发生改变(当编译选项中的minSdkVersion和targeSdkVersion均低于13时不会导致Activity重启)-API13新添加

smallestScreenSize

设备的物理屏幕尺寸发生改变,这个和屏幕方向没关系,比如切换到外部显示设备-API13新添加

layoutDirection

当布局方向发生改变的时候,正常情况下无法修改布局的layoutDirection的属性-API17新添加

 

 

上表的值代表Activity会在相应的情况下被系统回收,在需要的时候再重启,如果android:configChanges配置了以上的某个值,代表Activity在相应的情况下不会被系统回收内存,进而避免一些意外的错误出现(特别是一些需要在oncreate中初始化的信息,如果Activity重启,则不会再次执行oncreate,导致在oncreate方法中初始化的信息丢失,进而导致应用报错,一般会出现空指针异常)

问题:为何Activity被回收重启之后没有执行onCreate()或onNewIntent()或onRestart()等方法,而是直接执行onStart()方法,这个还是不得而知,如有大神知道,还望指点

参考文章:http://blog.csdn.net/qq_33544860/article/details/54863895

 

猜你喜欢

转载自my.oschina.net/u/3614895/blog/1647875