当前位置: 首页 > article >正文

Android中Activity启动的模式

在 Android 开发中,Activity 的启动模式(Launch Mode)定义了当启动一个 Activity 时,系统会如何处理它的实例。不同的启动模式可以影响 Activity 在任务栈中的管理方式,对用户的导航体验产生直接影响。下面详细介绍四种主要的启动模式:

1. standard 模式

  • 描述:这是默认的启动模式,每次启动 Activity 时都会创建一个新的实例,不管任务栈中是否已经存在该 Activity 的实例。
  • 适用场景:适用于不需要重用的界面,每次启动时都希望展示新的内容。
<activity android:name=".MyActivity"
    android:launchMode="standard" />

示例

// 每次调用都会启动一个新的实例
val intent = Intent(this, MyActivity::class.java)
startActivity(intent)
  • 栈行为:每次调用 startActivity(),都会将新的 Activity 放在栈顶。多个实例可以同时存在。

在这里插入图片描述

2. singleTop 模式

  • 描述:如果新启动的 Activity 已经位于任务栈的栈顶,则不会创建新的实例,而是复用现有实例。如果不在栈顶,则会创建新实例。
  • 适用场景:适合在某些情况下避免重复启动同一个 Activity,比如点击通知多次打开同一界面。
<activity android:name=".MyActivity"
    android:launchMode="singleTop" />

示例

// 如果MyActivity已经在栈顶,那么不会创建新的实例,而是复用已有的实例
val intent = Intent(this, MyActivity::class.java)
startActivity(intent)
  • 栈行为:当该 Activity 已经在栈顶时,不会创建新实例,而是调用现有实例的 onNewIntent() 方法。

在这里插入图片描述

3. singleTask 模式

  • 描述:如果在任何任务栈中已经存在该 Activity 的实例,则不会创建新的实例,而是将其带到前台,并清除其上方的所有其他 Activity。
  • 适用场景:适合需要独占任务栈的 Activity,如主页或单一功能页面。
<activity android:name=".MyActivity"
    android:launchMode="singleTask" />

示例

// 启动MyActivity时,如果已存在该实例,会清除其上方所有Activity
val intent = Intent(this, MyActivity::class.java)
startActivity(intent)
  • 栈行为:若栈中已有该 Activity 实例,则直接将该实例带到前台并清除其上方的所有 Activity。如果不存在,则创建新的实例。

在这里插入图片描述

4. singleInstance 模式

  • 描述:此模式会为该 Activity 创建一个专属的任务栈。在任何任务中只能有一个实例存在,每次启动时都会复用该实例。
  • 适用场景:用于需要独占一个任务栈的 Activity,通常用于特殊功能,如浮动的 Activity 或全屏显示的 Activity。
<activity android:name=".MyActivity"
    android:launchMode="singleInstance" />

示例

// 启动MyActivity时,它会运行在独立的任务栈中,且不会创建新实例
val intent = Intent(this, MyActivity::class.java)
startActivity(intent)
  • 栈行为:该 Activity 始终处于独立的任务栈中,任何启动请求都会直接复用该实例,不会创建新的实例。其他应用也可以启动这个 Activity,但只能通过其单一实例。
    在这里插入图片描述

小结

启动模式新实例条件复用条件
standard每次启动都会创建新的实例无法复用
singleTop栈顶没有实例时创建新的实例栈顶已有实例时复用,调用 onNewIntent()
singleTask任务栈中不存在实例时创建新的实例任务栈中存在时,复用并清空其上方 Activity
singleInstance独立栈中不存在实例时创建任务栈中存在时直接复用

以上是 Android 中四种 Activity 启动模式的详细说明,根据需要选择合适的模式来优化用户的导航体验和应用的任务管理。


http://www.kler.cn/a/382653.html

相关文章:

  • Python练习8
  • 推荐程序员好用的浏览器插件
  • docker搭建guacamole,web远程桌面
  • 十年码农的编程心得分享
  • 【ShuQiHere】️ 深入了解 ADB(Android Debug Bridge):您的 Android 开发利器!
  • 【JAVA】Java基础—基础语法:数据类型(基本数据类型与引用数据类型)
  • 算法——双指针
  • macOS15.1及以上系统bug:开发者证书无法打开,钥匙串访问无法打开一直出现图标后立马闪退
  • [项目] C++基于多设计模式下的同步异步日志系统
  • 【青牛科技】GC2803:白色家电与安防领域中 ULN2803 的卓越替代者
  • Laravel/Sail 中修改npm源的问题
  • 京津冀自动驾驶技术行业盛会|2025北京自动驾驶技术展会
  • WPF中如何简单的使用CommunityToolkit.Mvvm创建一个项目并进行 增删改查
  • RFID标签实现托盘智能化管理
  • 系统聚类的分类数确定——聚合系数法
  • 【学术精选】SCI期刊《Electronics》特刊“New Challenges in Remote Sensing Image Processing“
  • EasyExcel 学习之 导出 “提示问题”
  • 基于 Encoder-Decoder 架构的大语言模型
  • C++之list的使用
  • 02- 模块化编程-006 ADC0808数码显示对比
  • python-读写Excel:openpyxl-(4)下拉选项设置
  • 24软件包的查找、安装、更新和卸载
  • 100种算法【Python版】第51篇——希尔排序
  • Excel怎么转换成word?分享两种方法!
  • 基于matlab的基于Tent混沌映射改进的麻雀搜索算法SSA优化BP神经网络预测
  • 【北京迅为】《STM32MP157开发板嵌入式开发指南》-第七十八章 Qt控制硬件