正常情况:
启动Activity
用户打开activity ——> onCreate() ——>onStart() ——>onResume()——>运行状态
运行状态 ——>当前activity部分被覆盖(仍然可见,如弹窗等)
运行状态——>onPause() (暂停当前的activity运行)
运行状态 ——>当前activity被完全覆盖,完全不可见(打开新的activity、锁屏、按HOME键回到主屏、处于后台等)
运行状态——>onPause() ——>onStop() (暂停当前的activity运行)
被部分覆盖的activity ——>运行状态(即 回到前台)
onPause() ——>onResume()——>运行状态
当被完全覆盖的activity ——>运行状态 (即 回到前台)
onStop() ——>onRestart() ——>onStart() ——> onResume() ——>运行状态
运行状态 ——> 用户退出当前activity
运行状态——> onPause() ——>onStop() ——>onDestory() ——>运行结束
异常状态:
当被完全覆盖的activity处于后台 ——>更高优先级的进程需要内存,但是内存不足
onStop() ——>直接杀死进程(即杀死当前activity)
之后当用户退回当前activity时,会再次调用 onCreate()——>onStart()——>onResume()——>运行状态
当系统内存不足时,会按优先级杀死目标activity的进程
activity的优先级 如下( 高 ——>低)
1、完全可见、位于前台的activity,即 正与用户交互的activity
2、可见但不位于前台的activity(即 部分被覆盖 如 弹窗)
3、后台activity 即 不可见,不位于前台
资源相关的系统配置发生改变(如 横屏 切换 竖屏)
开始——>onSaveInstanceState() (保存当前状态 数据等)——>onPause() ——>onStop() ——>onDestroy()
[到此activity销毁完毕]
[下面是重新创建activity和恢复数据]
——>onCreate ——>onStart() ——>onRestoreInstanceState()(恢复数据 ——>onResume()——>重新运行
可不重新创建activity从而不调用onSaveInstanceState()、onRestoreInstanceState():
设置activity的configChanges属性设置
<activity
android:configChanges=“属性"
//属性说明:
//local:设备本地位置发生变化、一般指切换系统语言
//keyboardHidden:键盘的可访问性发生变化、如调出了键盘
//orientation:屏幕方向发生变化,如旋转
//screenSize:屏幕尺寸发生变化,如旋转
//smallestScreenSize:设置的物理屏幕尺寸发生变化,与屏幕方向无关
如切到外部显示设备
/activity>
此时系统将回调onConfigurationChanged ()