Activity 启动模式总结

Android 中的 Activity 启动模式(Launch Mode)定义了当一个 Activity 被启动时,系统在任务栈中如何处理它的行为。

启动模式是任务栈中Activity的一种行为分类,在了解启动模式前,我们需要了解一下Activity的容器任务栈

1. 任务栈

  • 任务栈 是一组按照用户启动顺序排列的 Activity 实例,遵循 原则。

  • 每个任务栈通常代表一个用户正在执行的任务(Task)。

  • 默认情况下,一个 App 只有一个任务栈,多个 Activity 按顺序压入其中。

总结

任务栈是Activity的容器,遵循 后进先出(LIFO) 的原则,默认一个APP只有一个任务栈.开启一个Activity会放入对应的任务栈.

2.启动模式

Activity 的启动模式(Launch Mode)定义了当一个 Activity 被启动时,系统在任务栈中如何处理它的行为。

分类

  • standard 标准模式
  • singleTop 栈顶复用模式
  • singleTask 栈内复用模式
  • singleInstance 独立任务栈模式

2.1 standard(标准模式,默认)

  • 每次启动此Activity 都会创建一个Activity对象 加入任务栈中
  • 执行onCreate()等创建流程方法
ini 复制代码
<activity android:name=".MyActivity"
          android:launchMode="standard" />

特点:

  • 每次 startActivity() 都会创建新实例。
  • 最常见最常用。

2.2. singleTop(栈顶复用)

  • 如果要启动的 Activity 正好在栈顶,不会新建实例,而是复用当前的实例。

  • 否则与 standard 一样,创建新实例。

ini 复制代码
<activity android:name=".MyActivity"
          android:launchMode="singleTop" />

特点:

  • 适合通知栏点击、Fragment 中多次点击避免重复启动页面。
  • 若复用实例,onNewIntent() 会被调用。

2.3 3. singleTask(栈内复用 + 清除上层)

  • 系统查找是否存在该 Activity 的实例;

  • 有:把它之上的所有 Activity 都销毁,它自己 复用 ,调用 onNewIntent()

  • 无:创建新实例。

ini 复制代码
<activity android:name=".MyActivity"
          android:launchMode="singleTask" />

特点:

  • 实例唯一,可跨栈复用(所在 task 内只保留一个)。
  • 适合首页、聊天窗口、视频通话等"入口页"。

2.4. singleInstance(单独任务栈)

  • Activity 被放在 一个独立的任务栈中

  • 每次调用都是使用它独占的任务栈。

ini 复制代码
<activity android:name=".MyActivity"
          android:launchMode="singleInstance" />

特点:

  • 所有调用该页面的应用或组件,都复用这个栈中的唯一实例。
  • 非常规页面(如锁屏页、来电页、系统全屏弹窗)使用。

3.对比总结

模式 是否复用 是否独立任务栈 应用场景
standard ❌ 每次都新建 默认,普通页面
singleTop ✅ 栈顶复用 防止重复点击跳转
singleTask ✅ 栈内复用 + 清栈 首页、统一入口页
singleInstance ✅ 复用 全局唯一页面(锁屏、来电)

4.场景推荐总结

场景 推荐启动模式
正常页面跳转 standard(默认)
连续点击防止重复 singleTop
回到主页/首页 singleTask
独立弹窗、锁屏、全屏页 singleInst

总结

Android Activity的四种启动模式是,针对Activity启动的不同场景,定义的页面在任务栈中的不同行为模式.所以在不同的业务需要求情况下,选用不同的任务栈,达到事半功倍的效果.

相关推荐
darling_user2 小时前
Android14 耳机按键拍照
android
Mryan20053 小时前
Android 应用多语言与系统语言偏好设置指南
android·java·国际化·android-studio·多语言
刘大浪4 小时前
uniapp 实战新闻页面(一)
android·uni-app
水沝淼燚5 小时前
kmp的实际使用1,开发android项目和native转kotlin开发
android
CYRUS_STUDIO5 小时前
破解 VMP+OLLVM 混淆:通过 Hook jstring 快速定位加密算法入口
android·算法·逆向
Renounce5 小时前
【Android】四大组件Service
android
wangjialelele5 小时前
二叉树基本学习
android
雨白9 小时前
Android 音视频播放:MediaPlayer 与 VideoView
android
Harry技术9 小时前
Fragment 和 AppCompatActivity 两个核心组件设计的目的和使用场景对比
android·android studio