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

简介: Android Activity的launchMode四种启动模式备忘Android的Activity的启动模式有四种,在AndroidManifest.xml通过配置Activity的android: launchMode可以设置。
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四种启动模式其实本身没什么特别需要研究的,但是时间久后容易混淆淡忘分不清楚不同启动模式的细微差别,此处简单记下留作备忘查阅。
相关文章
|
2月前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
85 6
|
2月前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
Android面试高频知识点(4) 详解Activity的启动流程
28 3
|
2月前
|
缓存 前端开发 Android开发
Android实战之如何截取Activity或者Fragment的内容?
本文首发于公众号“AntDream”,介绍了如何在Android中截取Activity或Fragment的屏幕内容并保存为图片。包括截取整个Activity、特定控件或区域的方法,以及处理包含RecyclerView的复杂情况。
20 3
|
2月前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
18 0
|
3月前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
讲解Activity的启动流程了,Activity的启动流程相对复杂一下,涉及到了Activity中的生命周期方法,涉及到了Android体系的CS模式,涉及到了Android中进程通讯Binder机制等等, 首先介绍一下Activity,这里引用一下Android guide中对Activity的介绍:
51 4
|
4月前
|
XML Android开发 数据格式
android中两个Activity同时设定了intent-filter的category为android.intent.category.LAUNCHER,会发生什么情况?
本文通过案例分析了在Android中当两个Activity都设置了`android.intent.category.LAUNCHER`类别时,会导致它们同时在应用启动器的"所有应用"页面显示为不同的启动入口。
87 2
android中两个Activity同时设定了intent-filter的category为android.intent.category.LAUNCHER,会发生什么情况?
|
3月前
|
Android开发 开发者
Android面试之Activity启动流程简述
每个Android开发者都熟悉的Activity,但你是否了解它的启动流程呢?本文将带你深入了解。启动流程涉及四个关键角色:Launcher进程、SystemServer的AMS、应用程序的ActivityThread及Zygote进程。核心在于AMS与ActivityThread间的通信。文章详细解析了从Launcher启动Activity的过程,包括通过AIDL获取AMS、Zygote进程启动以及ActivityThread与AMS的通信机制。接着介绍了如何创建Application及Activity的具体步骤。整体流程清晰明了,帮助你更深入理解Activity的工作原理。
54 0
|
10天前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
15天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
1天前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。