用户交互第一窗口,采用Activity栈管理Activity
1.Activity形态
- Active/Running
栈顶可见,与用户交互
- Paused
新的非全屏或者透明的Activity来到栈顶
失去焦点和与用户交互能力,状态信息、成员变量保留
内存极低情况会被系统回收
- Stopped
新的Activity完全覆盖
不再可见
状态信息、成员变量依然保留
- Killed
被系统回收掉
2.Activity生命周期
只有三个状态稳定,其他状态为过渡状态
Resumed | Paused | Stopped |
---|---|---|
Active/Running形态,栈顶交互 | 失去焦点,不接收输入 | 后台运行,不可见 |
- onCreate()
- 创建基本UI元素
- onResume()
- 需要重新初始化在onPause()中释放的资源
- onPause() and onStop()
- 清除Activity资源,避免浪费
- 释放系统资源
- onDestroy()
- 引用会在Activity销毁时销毁,但线程不会,所以清除开启的线程
3.启动模式
-
standard
默认启动模式,每次都会创建新的实例
-
singleTop
检查栈顶,栈顶是当前Activity则复用,不是就创建
复用时会调用onNewIntent()
-
singleTask
检查整个栈,存在则置于栈顶,且该Activity之上的其他Activity全部销毁出栈
onNewIntent()会被调用
其他程序启动不同程序的singleTask模式的Activity,如果该Activity有任务栈则整栈切至前台,如果没有则创建任务栈移至前台
-
singleInstance
Activity出现在一个新的任务栈,该栈就只有这一个Activity
不同程序可共享这个Activity
4.Intent Flag启动模式
-
FLAG_ACTIVITY_NEW_TASK
启动的每个Activity都在一个新的栈中,通常用在Service启动Activity,因为Service不存在Activity栈 -
FLAG_ACTIVITY_SINGLE_TOP
同singleTop -
FLAG_ACTIVITY_CLEAR_TOP
同singleTask -
FLAG_ACTIVITY_NO_HISTORY
当该Activity启动其他Activity后,自身就被销毁了,不会保留在Activity栈中
5.清空任务栈
在<Activity>标签中使用
- clearTaskOnLaunch
启动界面中设置为true,启动其他界面,home键回到手机主界面,再由图标进入程序,其他的界面会被销毁只留下启动界面
ps:我试了下,毫无效果
-
finishOnTaskLaunch
跟clearTaskOnLaunch差不多,上面是其他界面被销毁,这个效果是自己被销毁 -
alwaysRetainTaskState
设置为true,该Activity所在Task将不接收任何清除指令,一直保持当前Task状态