【Android】Activity LaunchMode 活动启动模式
android:launchMode 是 Android 中用来指定 Activity 启动行为的属性,它决定了在启动一个新的 Activity 时,是否会新建一个实例、是否会复用已有实例、以及它在任务栈(Task Stack)中的位置。
✅ 1. standard
(默认)
- 每次启动都创建一个新的实例
- 即使已经存在相同的 Activity,也会新建一个
- 每个实例都可以在栈中多次存在
🔁 适合场景: 大多数普通页面,允许多次打开。
✅ 2. singleTop
- 如果目标 Activity 已在栈顶,就不会创建新实例;否则创建新实例
- 若复用已有实例,会调用
onNewIntent()
代替onCreate()
🔁 适合场景: 顶部重复启动的页面(如新闻详情页),避免堆叠。
✅ 3. singleTask
- 栈中已有该 Activity,就不会创建新实例,而是清除该实例上面的所有 Activity
- 然后调用已存在实例的
onNewIntent()
方法 - 该 Activity 会成为栈顶(但仍在原任务栈中)
🔁 适合场景: 启动页面、主页、登录页等只需存在一个实例的页面。
✅ 4. singleInstance
- 该 Activity 始终在一个新的任务栈中独立存在
- 所有其他 Activity 启动时不会进入它的任务栈
- 所在栈中只有它一个 Activity
🔁 适合场景: 弹出窗口、来电界面、通知启动的独立任务等。
launchMode | standard |
singleTop |
singleTask |
singleInstance |
---|---|---|---|---|
描述 | 每次启动都创建一个新的实例 | 如果目标 Activity 已在栈顶,就不会创建新实例;否则创建新实例 | 栈中已有该 Activity,就不会创建新实例,而是清除该实例上面的所有 Activity | 该 Activity 始终在一个新的任务栈中独立存在 |
是否复用实例 | 否 | 是(栈顶) | 是 | 是 |
是否清除栈顶 | 否 | 否 | 是 | 是 |
是否新建任务栈 | 否 | 否 | 否 | 是 |
扫描二维码,在手机上阅读
收藏