笔记:Android Activity启动模式
- Android 有四种启动(加载)模式(LaunchMode):
standard;singleTop; singleTask;singleInstance
- 启动模式的设置方法
- 任务栈的概念:每个应用都有一个任务栈,是用来存放Activity的,功能类似于函数调用的栈,先后顺序代表了Activity的出现顺序
- 启动模式解释:
- standard
每次激活Activity时(startActivity),都创建Activity实例,并放入任务栈栈顶
- standard
激活前的任务栈 | 激活后的任务栈 | 新Activity位置 |
---|---|---|
- | - | - |
- | Activity-3 | 新激活的Activity |
Activity-2 | Activity-2 | - |
Activity-1 | Activity-1 | - |
- singleTop
如果目标任务在其堆栈顶部已有一个 Activity 实例,那么该实例将接收新 Intent(通过调用 onNewIntent());此时不会创建新实例。在其他情况下 — 例如,如果“singleTop”的一个现有实例虽在目标任务内,但未处于堆栈顶部,或者虽然位于堆栈顶部,但不在目标任务中 — 则系统会创建一个新实例并将其推送到堆栈上。
假如接收到的Intent为激活的Activity为Activity-3 | 激活前的任务栈 | 激活后的任务栈 | 新Activity |
---|---|---|---|
- | - | - | |
Activity-3 | Activity-3 | 激活的Activity-3 | |
Activity-2 | Activity-2 | - | |
Activity-1 | Activity-1 | - |
假如接收到的Intent为激活的Activity为Activity-2 | 激活前的任务栈 | 激活后的任务栈 | 新Activity |
---|---|---|---|
- | Activity-2 | 激活的Activity-2 | |
Activity-3 | Activity-3 | - | |
Activity-2 | Activity-2 | - | |
Activity-1 | Activity-1 | - |
- singleTask
如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都pop
假如接收到的Intent为激活的Activity为Activity-3 | 激活前的任务栈 | 激活后的任务栈 | 新Activity |
---|---|---|---|
- | - | - | |
- | Activity-3 | 激活的Activity-3 | |
Activity-2 | Activity-2 | - | |
Activity-1 | Activity-1 | - |
假如接收到的Intent为激活的Activity为Activity-2 | 激活前的任务栈 | 激活后的任务栈 | 新Activity |
---|---|---|---|
- | - | - | |
Activity-3 | - | - | |
Activity-2 | Activity-2 | 激活的Activity-2 | |
Activity-1 | Activity-1 | - |
- singleInstance
Activity会单独占用一个任务栈,具有全局唯一性,后续的请求均不会创建新的Activity,这个任务栈被销毁了才回重新创建。
- SingTask的应用:
可以用来退出整个应用。 将主Activity设为SingTask模式,然后在要退出的Activity中转到主Activity,然后重写主Activity的onNewIntent函数,并在函数中加上一句finish。
评论区