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

相关推荐
maki0772 小时前
虚幻版Pico大空间VR入门教程 05 —— 原点坐标和项目优化技巧整理
android·游戏引擎·vr·虚幻·pico·htc vive·大空间
千里马学框架2 小时前
音频焦点学习之AudioFocusRequest.Builder类剖析
android·面试·智能手机·车载系统·音视频·安卓framework开发·audio
fundroid5 小时前
掌握 Compose 性能优化三步法
android·android jetpack
TeleostNaCl6 小时前
如何在 IDEA 中使用 Proguard 自动混淆 Gradle 编译的Java 项目
android·java·经验分享·kotlin·gradle·intellij-idea
旷野说8 小时前
Android Studio Narwhal 3 特性
android·ide·android studio
maki07714 小时前
VR大空间资料 01 —— 常用VR框架对比
android·ue5·游戏引擎·vr·虚幻·pico
xhBruce18 小时前
InputReader与InputDispatcher关系 - android-15.0.0_r23
android·ims
领创工作室18 小时前
安卓设备分区作用详解-测试机红米K40
android·java·linux
hello_ludy18 小时前
Android 中的 mk 和 bp 文件编译说明
android·编译
maki07721 小时前
VR大空间资料 03 —— VRGK使用体验和源码分析
android·vr·虚幻·源码分析·oculus·htc vive·vrgk