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

相关推荐
没有了遇见1 小时前
Android 通过 SO 库安全存储敏感数据,解决接口劫持问题
android
hsx6661 小时前
使用一个 RecyclerView 构建复杂多类型布局
android
hsx6661 小时前
利用 onMeasure、onLayout、onDraw 创建自定义 View
android
守城小轩1 小时前
Chromium 136 编译指南 - Android 篇:开发工具安装(三)
android·数据库·redis
whysqwhw2 小时前
OkHttp平台抽象机制分析
android
hsx6663 小时前
Android 内存泄漏避坑
android
whysqwhw3 小时前
OkHttp之okhttp-bom模块的分析
android
餐桌上的王子3 小时前
Android 构建可管理生命周期的应用(二)
android
幽你一默4 小时前
Android 版本差异速查表(开发者视角)
android
不萌4 小时前
android 项目中的屏幕适配方案
android