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

详细阐述Android中的四种启动模式

目录

1. standard 启动模式

2. singleTop 启动模式

3. singleTask 启动模式

4. singleInstance 启动模式

总结


在 Android 中,Activity 的启动模式决定了在启动新的 Activity 或重新启动已存在的 Activity 时,它在任务栈(Task Stack)中的行为。理解这四种启动模式有助于开发者更好地管理应用程序的任务和活动行为。以下是对这四种启动模式的详细阐述:

1. standard 启动模式

描述

  • 默认启动模式:每次启动一个 Activity 时,都会创建该 Activity 的一个新的实例,并将其放入当前任务栈的顶部。
  • 多实例:同一个 Activity 可以在一个任务栈中有多个实例,每个实例独立存在。

使用场景

  • 适用于大多数 Activity,尤其是那些可以多次启动并需要在不同的上下文中使用的 Activity,例如电子邮件应用中的查看邮件 Activity,每次点击不同的邮件都会启动新的 Activity 实例。

示例

<activity android:name=".MyActivity"android:launchMode="standard" />
  • 当用户多次启动 MyActivity 时,每次都会创建一个新的实例,任务栈中可能存在多个 MyActivity 实例。

任务栈行为

  • 任务栈中可以有多个相同的 Activity 实例,并且这些实例彼此独立。

2. singleTop 启动模式

描述

  • 栈顶复用:如果任务栈的顶部已经是该 Activity 的实例,则不会创建新的实例,而是复用顶部的实例,并调用该实例的 onNewIntent() 方法。
  • 新实例创建:如果该 Activity 的实例不在栈顶(即使存在于栈中),则会创建新的实例,行为与 standard 模式类似。

使用场景

  • 适用于那些当用户再次点击时不需要创建新的实例的 Activity,例如浏览器中的页面,当用户重复点击某个页面时,不需要重新加载而是复用已经加载的页面。

示例

<activity android:name=".MyActivity"android:launchMode="singleTop" />
  • 如果 MyActivity 已经在栈顶,再次启动该 Activity 时会调用 onNewIntent() 方法,而不是创建新的实例。

任务栈行为

  • 如果 Activity 在栈顶,系统将复用它,否则将创建新的实例。

3. singleTask 启动模式

描述

  • 唯一实例:系统确保在任务栈中只存在该 Activity 的一个实例。每次启动该 Activity 时,如果它已经存在,则会将它上面的所有其他 Activity 弹出栈,使该 Activity 位于栈顶。
  • 新任务栈:如果该 Activity 不在当前任务栈中,将创建一个新的任务栈,并将该 Activity 置于新栈的根位置。

使用场景

  • 适用于那些通常只希望有一个实例存在的 Activity,例如主屏幕 Activity。当用户从不同入口打开主屏幕时,总是返回同一个实例。

示例

<activity android:name=".MainActivity"android:launchMode="singleTask" />
  • 每次启动 MainActivity 时,如果它已经存在,它将回到栈顶,并移除它上面的所有 Activity。

任务栈行为

  • 任务栈中只存在一个实例,且每次启动时都会将该实例置于栈顶,并移除它上面的其他 Activity。

4. singleInstance 启动模式

描述

  • 独占任务栈singleInstance 模式类似于 singleTask,但它保证该 Activity 独占一个任务栈,且任务栈中只能有它一个 Activity 实例。
  • 跨应用共享:当其他应用启动这个 Activity 时,该 Activity 将被复用,不会创建新的任务栈。

使用场景

  • 适用于那些需要独立运行,且希望跨多个应用共享单一实例的 Activity,例如锁屏应用或者独立播放器。

示例

<activity android:name=".MyActivity"android:launchMode="singleInstance" />
  • 该 Activity 会独占一个任务栈,其他 Activity 无法与它共享这个栈。

任务栈行为

  • 该 Activity 独占一个任务栈,其他 Activity 无法进入这个栈。即使从不同的任务启动它,它仍然会复用同一个实例。

总结

  • standard:默认模式,每次启动都会创建新的 Activity 实例。适合普通的、可以多次实例化的 Activity。
  • singleTop:如果 Activity 已经在栈顶,则复用该实例。适合当 Activity 需要复用而不必每次都创建新的实例的场景。
  • singleTask:在任务栈中只允许一个实例存在,每次启动时会清除它上方的所有 Activity。适合需要保持唯一实例且需要清理任务栈的场景。
  • singleInstance:独占一个任务栈,且在所有应用中只存在一个实例。适合需要完全独立运行的 Activity。

这些启动模式可以通过在 AndroidManifest.xml 文件中为 Activity 的 <activity> 标签设置 android:launchMode 属性来指定。根据应用的需求选择合适的启动模式,可以更好地管理 Activity 的行为和用户体验。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 项目问题 | CentOS 7停止维护导致yum失效的解决办法
  • 前端数据存在什么地方,刷新页面之后依旧存在
  • 【数学建模备赛】Ep05:斯皮尔曼spearman相关系数
  • 尚硅谷Java面试题第四季-MySQL面试题
  • 关于武汉芯景科技有限公司的多协议收发芯片XJ526(第二篇RS422模式)开发指南(兼容SP526)
  • Java:循环练习
  • 开发指南054-选择人员
  • day35
  • LUOGU P2048 [NOI2010] 超级钢琴(贪心+堆)
  • vue elementPlus中使用dayjs
  • 《Docker:实现开发环境一致性与高效部署的利器》
  • ArcGIS如何将投影坐标系转回为地理坐标系
  • SpringBoot集成kafka-生产者发送消息
  • 【前端面试】浏览器原理解读
  • Scratch深潜:解锁递归与分治算法的编程之门
  • JavaScript 如何正确处理 Unicode 编码问题!
  • [NodeJS] 关于Buffer
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • C++11: atomic 头文件
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • JAVA并发编程--1.基础概念
  • Linux中的硬链接与软链接
  • markdown编辑器简评
  • php的插入排序,通过双层for循环
  • rabbitmq延迟消息示例
  • Spring Boot快速入门(一):Hello Spring Boot
  • web标准化(下)
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 日剧·日综资源集合(建议收藏)
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 7行Python代码的人脸识别
  • Mac 上flink的安装与启动
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​补​充​经​纬​恒​润​一​面​
  • ​力扣解法汇总946-验证栈序列
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #{}和${}的区别?
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • ( 10 )MySQL中的外键
  • (160)时序收敛--->(10)时序收敛十
  • (层次遍历)104. 二叉树的最大深度
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (四)stm32之通信协议
  • (一)appium-desktop定位元素原理
  • (转)平衡树
  • (自用)交互协议设计——protobuf序列化
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .CSS-hover 的解释
  • .net core 控制台应用程序读取配置文件app.config
  • .NET 设计模式初探
  • .net 中viewstate的原理和使用