02_Android launchMode-启动模式

1. LaunchMode 简介


launchMode 是 Activity 类的一个属性,该属性包括4个具体值:standard、singleTop、singleTask、singleInstance。我们都知道,android 系统中启动 Activity 是通过 Intent 实例进行的,当系统收到一个 Intent 的实例需要去启动指定的 Activity 的时候,android 系统会根据目标 Activity 设置的该属性值来决定是需要创建新的该 Activity 实例以及如何在 Task 中创建该 Activity 的实例。这就是 launchMode 这个属性的作用。

2. 四种启动模式描述


2.1 模式分类

  • 普通类型:用户常用的启动模式类型,大部分 Activity 都是这两种启动模式。包括 standard 和 singleTop 两种启动模式;
  • 特殊类型:具有特殊的行为的启动模式,只针对特殊需求的使用。包括 singleTask 和 singleInstance 两种启动模式。

2.2 standard

可以有 Activity 多个实例,系统默认的启动模式,当系统接收到一个 Intent 实例去启动一个 standard 模式的 Activity 时,系统总是会在目标栈的顶部创建一个新的 activity 实例,并把 Intent 的实例传进去。

也就是说它可以无限制的创建。你每一次通过 Intent 去启动这种模式的 Activity 都会重新创建一个。

2.2.1 该模式在 android5.0 前后的区别

android 版本 目标 Activity 来源 目标 Activity 所处栈
5.0之前 相同的应用 当前应用栈顶部
- 不同的应用 当前任务栈顶部
5.0之后 相同的应用 当前应用栈顶部
- 不同的应用 新创建任务栈的根部

2.3 singleTop

“在顶部只能有一个”。

该模式下的 Activity 实例数要具体情况而定。当系统接收到一个 Intent 实例去启动一个 singleTop 模式的 Activity 时,如果在目标栈的顶部存在一个该 Activity 的实例的话,那么系统就会重用这个 Activity 的实例而不创建新的实例,并回调该 Activity 的 onNewIntent(Intent intent) 方法把新的 Intent 实例当作方法参数传递进去;如果在目标栈的顶部没有该 Activity 的实例的话系统将会再新建一个 Activity 实例,与 standard 的行为就一样了。

所以需要注意的是,在开发时,如果指定了一个 Activity 的启动模式是 singleTop 的那就应该既要重写 onCreated()方法用于应对第一次创建的情况,也要重写 onNewIntent() 方法来应对重复创建的情况。

2.4 singleTask

该模式只允许存在 Activity 一个实例,当系统接收到一个 Intent 实例去启动一个 singleTask 模式的 Activity 时,如果不存在该 Activity 的实例的话,系统会先创建一个新的 Task,并在该 Task 底部里面创建一个该 Activity 的实例,随后把 Intent 实例传递进去;如果已经存在一个该 Activity 的实例的话,系统就不会再创建新的实例,那么系统就会重用这个 Activity 的实例而不创建新的实例,并回调该 Activity 的 onNewIntent(Intent intent) 方法把新的 Intent 实例当作方法参数传递进去,同时,该 Activity 实例所在的 Task 将会被调到前台。

2.4.1目标Activity和源Activity是否来自同一应用的区别

源Activity和目标Activity来源 是否已经存在目标Activity的实例 内容
来自同一应用 直接在当前的任务栈中创建SingleTask模式的Activity并置于栈顶
- 系统会把任务栈中目标Activity之上的所有Activity销毁,以让目标Activity处在栈顶的位置
来自不同应用 直接在目标Activity所在应用的任务栈的栈顶创建
- 目标Activity所在任务栈会被置于前台(即用户可见),而且也会把目标Activity之上的所有Actvity全部销毁。

2.5 singleInstance

该模式的 Activity 实例数唯一,类似于 singleTask,唯一不同的地方在于,singleInstance 的 Activity 不允许自己的 Task 中存在其他的 Activity 实例,也就是说 singleInstance 的 Activity 永远是 Task 中唯一的一个 Activity 实例。

3. 使用场景


standard:绝大多数标准的跳转;
singleTop:需要重复进入当前页面,不用重复初始化;
singleTask:只允许拥有一个实例。

参考文章
Activity 的 Task 以及 launchMode 研究

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容