Android非正常结束时的生命周期

正常的Activity的生命周期中,当在一个oldActivity中启动一个新的newActivity时,先调用oldActivity的onPause方法,然后调用newActivity的onCreate-->onStart-->onResume,执行这三个方法之后,才开始执行oldActivity的onStop方法,所以在oldActivity的onPause方法中,不能进行耗时操作

1.第一种情况,资源相关的系统配置发生改变导致Activity被杀死并重新创建

Activity-->意外情况-->onSaveInstanceState-->onPause-->onStop-->onDestroy

重新启动时调用-->onCreate-->onStart-->onRestoreInstanceState,这两个方法中的savedInstanceState参数即保留这上次意外停止时的信息,

 

2.第二种情况,系统内存不足导致低优先级的Activity被杀死

低优先级的Activity会在内存不足时被杀死

优先级高:正在前台且可见的Activity

优先级中:不在前台,但是可见的Activity(如在Activity中弹出弹窗)

优先级低:不在前台不可见

 

需要注意的是onSaveInstanceState只有在非正常退出才会执行,且执行后再重启onRestoreInstanceState的参数一定有值,而onCreate的参数在首次启动时是没有值的,所以如果在onCreate中恢复数据时需要判空,官方建议在onRestoreInstanceState方法中恢复数据

 

 

第一种情况下,如果不想销毁Activity重新创建,则需要制定configChanges属性.常用的有:

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

orientation:屏幕方向发生了改变

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

screenSize:屏幕尺寸发生了改变,当旋转屏幕时,屏幕尺寸也会发生改变,当编译选项中的minSdkVersion和tarSdkVersion都低于13时,此选项不会导致Activity重启,否则会导致Activity重启

你可能感兴趣的:(android)