Activity的生命周期
3. Activity的生命周期
3.1 返回栈
Android是使用任务(task)来管理Activity(ac)的,一个任务就是一组存放在栈里的ac的集合,这个栈也被称作返回栈,最新的ac总是在栈顶,当按Back键或调用finish()方法时,栈顶的ac会出栈,前一个入栈的ac就被顶到了栈顶。系统总是会显示处于栈顶的ac给用户。
3.2 Activity状态
每个ac在其生命周期中最多可能会有4种状态
- 运行状态
当ac处于栈顶时,它就处于运行状态。系统最不愿回收的就是处于运行状态的ac,因为这会带来非常差的用户体验,闪退就是极好的例子
- 暂停状态
当一个ac不再处于栈顶,却还可见时,就是暂停状态。因为不是所有的ac都能占满整个屏幕。
- 停止状态
当一个ac不再处于栈顶,又完全不可见的时候,就进入了停止状态,系统会为这种ac保存相应的状态和成员变量,但是如果其他地方需要内存时,处于停止状态的ac可能会被回收
- 销毁状态
一个ac从返回栈被移除后就变成了销毁状态。系统最倾向于回收这种状态下的ac,以确保内存充足。
3.3 Activity生存期
Ac类中定义了七个回调方法
onCreate()
第一次创建,进行初始化操作,加载布局、绑定事件等
onStart()
ac由不可见变为可见时
onResume()
ac准备好与用户交互时
onPause()
系统准备去启动或回复另一个ac时
onStop()
ac完全不可见时,与前者的区别在于前者可能可见
onDestroy()
ac被销毁之前
onRestart()
ac由停止状态变为运行状态时
另外,ac的生存期被分为三种生存期:
- 完整生存期:创建到销毁
onCreate()
->onDestroy()
- 可见生存期:从可见的一刻到完全不可见的一刻
onStart()
->onStop()
- 前台生存期:从准备好交互到系统去启动另一个ac
onResume()
->onPause()
3.4 生命周期的demo
新建项目ActivityLifeCycleTest,New两个子ac,NormalActivity和DialogActivity,并分别在布局中写以下配置