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启动的不同场景,定义的页面在任务栈中的不同行为模式.所以在不同的业务需要求情况下,选用不同的任务栈,达到事半功倍的效果.

相关推荐
逗脑IDE2 小时前
零基础学ESP32:蓝牙控制舵机——手机一点,舵机就转!
android·智能手机
清霜之辰3 小时前
骁龙 8397 舱驾融合平台端侧大模型部署:7B 模型本地推理与 64GB 内存账本
android
烽火聊员3 小时前
Android屏幕卡顿traces.txt拉取查看
android·java·android studio
只睡四小时5 小时前
JS 手写 D-pad 空间导航:电视端焦点引擎实战
android·开发语言·前端·javascript·ecmascript·hls·空间导航
恋猫de小郭5 小时前
Android 原生的 Compose A2UI 也来了,你还抱着 XML 养老吗?
android·前端·flutter
程序媛_5 小时前
【JMeter】准备token文件
android·jmeter
维克兜率天5 小时前
【维克】弹性策略:用“乖离率“捕捉超跌反弹
android·开发语言·python·深度学习·kotlin·量化
古法安卓6 小时前
Android-Ext4文件系统问题排查
android·java·android studio
传奇开心果编程7 小时前
【用案例学Material 3 Expressive】第1课:从一封邮件开始,感受安卓设计新语言的表现力
android·学习·ui·kotlin·android jetpack
生如夏花爱学习229669 小时前
贴心使用的语音生活小助手
android