Android Activity的launchMode四种启动模式备忘

Android的Activity的启动模式有四种,在AndroidManifest.xml通过配置Activity的android: launchMode可以设置。分别是:standard(标准模式), singleTop(单顶模式), singleTask(单任务模式),singleInstance(单例模式)。
了解Android的Activity启动模式,首先要了解Activity的“回退栈(BackStack)”概念。Android启动Activity后,会建立一个栈数据结构存放当前App拉起来的Activity,在栈中自底往上存放启动的Activity。当在AndroidManifest.xml配置launchMode后,将会决定Activity启动的行为模式。以下是Activity四种启动模式:

(一)standard标准模式
standard标准启动模式是Android Activity默认的启动模式,如果没有在AndroidManifest.xml配置Activity的launchMode,那么standard就是该Activity的启动模式。
假设当前回退栈存自底往上存在A-B-C。假设C配置了启动模式为标准模式standard。此时C又startActivity(C),那么此时将会再次重新创建一个实例C压入回退栈,栈结构变化为A-B-C-C。可以简单认为standard标准模式是简单、无脑的创建Activity实例,创建完直接压入回退栈。

(二)singleTop单顶模式
singleTop单顶启动模式,顾名思义,保持唯一一个Activity处于顶部。singleTop单顶启动模式会回调onNewIntent函数。singleTop单顶模式细分情景有些复杂。假设C配置启动模式为singleTop:

(a)假设当前回退栈A-B-C。此时C又startActivity(C),那么此时不会像standard标准启动模式下无脑新起一个实例C压入栈顶,而是直接复用实例C,最后栈的结构变为:A-B-C。此处的C不会进入onCreate和onStart等生命周期,但会回调onNewIntent。
(b)假设当前回退栈栈顶没有C,那么此时和standard标准启动模式一样,创建一个新的Activity实例压入栈。
(c)假设当前回退栈是A-B-C-D。此时D又startActivity(C),那么此时的栈结构变为A-B-C-D-C。

(三)singleTask单任务模式

singleTask单任务启动模式,保持当前回退栈处于栈顶且唯一,同时回调onNewIntent。比如当前栈A-B-C-D。假设B配置了启动模式为singleTask单任务模式。D又startActivity(B),此时Android系统发现栈中已存在B,那么Android的处理方式就是把B之上的全部Activity实例弹出栈,此时栈结构变为A-B。同时回调onNewIntent。
如果此时栈中没有B,那么就创建一个实例B压入栈。
singleTask单任务启动模式,通常的开发场景,比如,一个App存在很多个页面,当用户使用一段时间后,进入的Activity层级很深后,想一键回到主页(Home Page),那么这么singleTask单任务启动模式配置后的主页Activity就可以实现这个目的。

(四)singleInstance单例模式
singleInstance单例启动模式,该启动模式下的Activity单独占有一个回退栈,并且该栈是Android系统全局唯一的,真正的单例模式。通常的开发场景中比如web浏览器,就是这种启动模式,全Android系统唯一一个单例,不管是哪个Activity调用和start。

备注:Android的Activity四种启动模式其实本身没什么特别需要研究的,但是时间久后容易混淆淡忘分不清楚不同启动模式的细微差别,此处简单记下留作备忘查阅。

Android Activity的launchMode四种启动模式备忘相关推荐

  1. Android中Activity的四种启动模式

    每次看到这种专有词汇都十分佩服创造者的智慧,创造者一定和我一样都中二,我已然确信. 我写博客的目的,就是希望不断磨练自己,让自己能够不将一件简单的事情讲的复杂,让自己能将一件复杂的事情讲的简单.嘛嘛, ...

  2. Android Activity:四种启动模式,Intent Flags和任务栈(转自他人博客)

    在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.那各个页面跳转关系如何决定呢?如果启动了顺序启动了ABCD的Activiy,如何从D调回 ...

  3. android的四种启动模式,(转)彻底弄懂Activity四大启动模式

    原地址:https://blog..net/mynameishuangshuai/article/details/51491074 最近有几位朋友给我留言,让我谈一下对Activity启动模式的理解. ...

  4. Android学习-Kotlin语言入门-变量、函数、语法糖、when、for-in、主构造函数、单例类、函数式API、集合遍历、隐式Intent、Activity生命周期、四种启动模式、标准函数

    探究java语言的运行机制 变量.函数.语法糖 when条件语句 for循环 主构造函数.次构造函数 数据类和单例类 集合的创建与遍历 集合的函数式API 创建菜单 隐式使用Intent Activi ...

  5. Activity的四种启动模式和onNewIntent()

    Android中Activity启动模式详解 在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模 ...

  6. 知识总结: Activity的四种启动模式

    通常情况下,一个应用有一个Task,这个Task就是为了完成某个工作的一系列Activity的集合.而这些Activity又被组织成了堆栈的形式.当一个Activity启动时,就会把它压入该Task的 ...

  7. Activity之间的跳转和四种启动模式

    一.Activity的基础知识 1.每一个创建好的Activity都需要在manifests文件中进行注册. 这里就注册了2个activity! 2.打开app的时候会首先进入有intent-filt ...

  8. Activity的四种启动模式-图文并茂

    1.对于使用standard 模式的活动,系统不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例. 例如A启动A,A再接着启动A,A继续启动A,然后再分别出栈,如图所示 2. ...

  9. Activity的四种启动模式应用场景

    在这金三银四的时间里一个哥们忽然一本正经的问我Activity的启动模式和具体的应用模式:我也一想是啊,平是不太注意结果到了 关键的时刻卡壳了,感觉未雨绸缪一下,做个记录: 一.Activity四种启 ...

最新文章

  1. 【python基础】list操作相关:扩充、条件查找【IndexError: list assignment index out of range】...
  2. Kafka精华问答 | Kafka有哪些使用场景?
  3. 优化mysql插入数据_优化MySQL插入方法的五个妙招
  4. iOS-OpenGLES 简单渲染
  5. Atitit 知识图谱 知识抽取 信息抽取的总结艾提拉总结 目录 1. 知识抽取 1 2. 数据源主要来自两种渠道( 2 2.1. 内部结构化数据vs 外部网页数据 2 3. 2. 知识图谱的数据来
  6. 算法图解第一章笔记与习题(算法简介)
  7. 红帽子linux 9.0下载,红帽子 RedHat linux 9.0 简体中文正式版 下载地址
  8. send()、sendto()和recv()、recvfrom()的使用
  9. 小米手机计算机usb连接,小米5手机怎么连接电脑 USB调试方法教程
  10. 大话设计模式:第27章 解释器模式
  11. BNUOJ 1043 旋转方块
  12. 基于SpringBoot 在线答题系统 含小程序!
  13. 每日打卡 22 11 16 CF 1694B Paranoid String
  14. 神舟笔记本WLAN打不开的解决方法
  15. nodejs+vue+elementui摄影作品图片展示交流网站express
  16. Android热更新
  17. C++ 判断路径是否存在,不存在则创建(包含多级创建)
  18. my visitor
  19. DOS下如何查看电脑硬盘分区
  20. 网络工具netstat与ss

热门文章

  1. python字符串命名_从输入字符串到命名复制python 2.7
  2. 南大庄建军计算机学院讲座,教师成果 - 南京大学 - 电子信息专业国家级实验教学示范中心...
  3. c语言答案填空选择,C语言试题配答案
  4. 会汇编语言再学c语言,只有C语言功底的我学习汇编语言可以吗?
  5. 我的车模我做主 - 精美的车模作品
  6. 2021年春季学期-信号与系统-第八次作业参考答案-第四小题
  7. Python之禅--给编程者的掏心窝子的话
  8. 两轴机械臂+机械爪整体控制板设计与机械爪控制调试
  9. js模板字符串自定义类名_【Vue.js 入门到实战教程】07Vue 组件注册 | 基本使用和组件嵌套...
  10. react可视化编辑器_UE4下玩转react