Android Studio教程04-Task和Back stack
1.Tasks and Back Stack
1.1. 当点击Back按钮返回到上一个Activity时发生了什么?
后进-先出原则
1.2. 点击HOME按钮
当点击HOME按钮的时候,原activity停止,但是整个activity依然完整,用户返回这个task的时候,依然保持用户离开时的样子
1.3.多次点击进入Activity-Back按钮
- Activtiy会被多次实例化–我们可以避免它
2.管理任务
-
一般情况下任务都遵循后进-先出的原则,无特殊情况不需要去更改它
-
但是有时候可能遇到下面的情况:
- 希望在现Activity中启动新的Task(从当前app跳到另外一个app)
- 不希望activity被多次实例化
- 明确back stack的activity
-
怎么做?
- 在
AndroidManifest.xml
中的<activity>
添加属性taskAffinity
launchMode
allowTaskReparenting
clearTaskOnLaunch
alwaysRetainTaskState
finishOnTaskLaunch
- 在
startActivity()
之前的Intent
中添加参数FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_SINGLE_TOP
2.1. 定义启动模式
定义新的Activity与当前的Task如何关联
(1).method1: 在mainifest中声明
- 在
属性 | 模式 | 含义 |
`launchMode` | `standard(default)` | activity可以创建多次,每个task可以含有多个实例(A-B-C: A-B-C-C) |
`singleTop` | 当activity在top时,不会创建新实例(A-B-C: A-B-C)(A-B-C: A-B-C-B) | |
`singleTask` | 创建新的Task和实例化activity,但是如果activity之前已经存在,不会实例化 | |
`singleInstance` | 上同 |
(2).method2: 在Intent flag中声明
flas | 含义 | 与method1匹配 |
---|---|---|
FLAG_ACTIVITY_NEW_TASK | 在新的Task中开启Activit,如果这个task已经存在,直接将他调用到前端 | singleTask |
FLAG_ACTIVITY_SINGLE_TOP | 如果在当前activity中再次开启当前activity,直接调用onNewIntent()方法,不会创建新实例 | singleTop |
FLAG_ACTIVITY_CLEAR_TOP | 如果将要开启的actiivty存在于当前task中,直接销毁task中该activity之前的所有activity 然后调用onNewIntent()方法,不会创建新实例 |
—- |