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四种启动模式其实本身没什么特别需要研究的,但是时间久后容易混淆淡忘分不清楚不同启动模式的细微差别,此处简单记下留作备忘查阅。
相关文章
|
XML Android开发 数据格式
android中两个Activity同时设定了intent-filter的category为android.intent.category.LAUNCHER,会发生什么情况?
本文通过案例分析了在Android中当两个Activity都设置了`android.intent.category.LAUNCHER`类别时,会导致它们同时在应用启动器的"所有应用"页面显示为不同的启动入口。
686 2
android中两个Activity同时设定了intent-filter的category为android.intent.category.LAUNCHER,会发生什么情况?
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
401 6
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
Android面试高频知识点(4) 详解Activity的启动流程
520 3
|
缓存 前端开发 Android开发
Android实战之如何截取Activity或者Fragment的内容?
本文首发于公众号“AntDream”,介绍了如何在Android中截取Activity或Fragment的屏幕内容并保存为图片。包括截取整个Activity、特定控件或区域的方法,以及处理包含RecyclerView的复杂情况。
472 3
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
讲解Activity的启动流程了,Activity的启动流程相对复杂一下,涉及到了Activity中的生命周期方法,涉及到了Android体系的CS模式,涉及到了Android中进程通讯Binder机制等等, 首先介绍一下Activity,这里引用一下Android guide中对Activity的介绍:
537 4
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
353 0
|
Android开发 开发者
Android面试之Activity启动流程简述
每个Android开发者都熟悉的Activity,但你是否了解它的启动流程呢?本文将带你深入了解。启动流程涉及四个关键角色:Launcher进程、SystemServer的AMS、应用程序的ActivityThread及Zygote进程。核心在于AMS与ActivityThread间的通信。文章详细解析了从Launcher启动Activity的过程,包括通过AIDL获取AMS、Zygote进程启动以及ActivityThread与AMS的通信机制。接着介绍了如何创建Application及Activity的具体步骤。整体流程清晰明了,帮助你更深入理解Activity的工作原理。
658 0
|
数据库 Android开发 开发者
Android基础知识:请解释Activity的生命周期。
Android基础知识:请解释Activity的生命周期。
257 2
|
Android开发 UED
Android Activity的生命周期详解
Android Activity的生命周期详解
422 0
|
Android开发
Android Studio APP开发入门之活动Activity中启停活动页面的讲解及实战(附源码,包括Activity的启动结束、生命周期、跳转等)
Android Studio APP开发入门之活动Activity中启停活动页面的讲解及实战(附源码,包括Activity的启动结束、生命周期、跳转等)
435 0

热门文章

最新文章