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四种启动模式其实本身没什么特别需要研究的,但是时间久后容易混淆淡忘分不清楚不同启动模式的细微差别,此处简单记下留作备忘查阅。
相关文章
|
3月前
|
Android开发 开发者
Android UI设计: 请解释Activity的Theme是什么,如何更改应用程序的主题?
Android UI设计: 请解释Activity的Theme是什么,如何更改应用程序的主题?
44 1
|
3月前
|
数据库 Android开发 开发者
Android基础知识:请解释Activity的生命周期。
Android基础知识:请解释Activity的生命周期。
45 2
|
6月前
|
存储 SQL 人工智能
Android Activity启动流程一:从Intent到Activity创建
Android Activity启动流程一:从Intent到Activity创建
|
1月前
|
Android开发
Android的启动模式
Android的启动模式
13 0
|
2月前
|
Android开发
[Android 四大组件] --- Activity
[Android 四大组件] --- Activity
22 1
|
3月前
|
Android开发
Android基础知识:什么是Fragment?与Activity的区别是什么?
Android基础知识:什么是Fragment?与Activity的区别是什么?
298 54
|
4月前
|
XML 安全 Java
Android Studio App开发入门之活动Activity中为活动补充附加信息讲解及实战(附源码 超详细必看)
Android Studio App开发入门之活动Activity中为活动补充附加信息讲解及实战(附源码 超详细必看)
36 0
|
4月前
|
Android开发
Android Studio App开发入门之在活动之间传递消息(附源码 超详细必看)(包括显示和隐式Intent,向上一个和下一个Activity发送数据)
Android Studio App开发入门之在活动之间传递消息(附源码 超详细必看)(包括显示和隐式Intent,向上一个和下一个Activity发送数据)
46 0
|
4月前
|
Android开发
Android Studio APP开发入门之活动Activity中启停活动页面的讲解及实战(附源码,包括Activity的启动结束、生命周期、跳转等)
Android Studio APP开发入门之活动Activity中启停活动页面的讲解及实战(附源码,包括Activity的启动结束、生命周期、跳转等)
43 0
|
5月前
|
Android开发
安卓activity管理器
安卓activity管理器
27 0