一篇文章搞懂 Activity 启动模式

栏目: IOS · Android · 发布时间: 5年前

内容简介:本文大部分翻译自本文将图文的模式来讲解 4 中

本文大部分翻译自 《Android “launchMode” (Visualized)》 , 并结合自己的理解在 SingleInstance 中添加了补充内容

启动模式 是很重要的一块知识点,每位安卓开发都应该了解它是如何运作的。大部分的开发者(包括我自己)认为我们已经知道了如何来使用 启动模式 。但是其实我们错了。不仅仅是知道将 Activity 设置为 SingleTask 来防止重复实例化就足够了,虽然大部分情况下这已经解决了我们的业务需求。但是我们真的了解当我们将一个 Activity 设置为 SingleTask 时,它是如何影响 Activity 任务栈内其他 Activites 的吗?

本文将图文的模式来讲解 4 中 启动模式 的作用及区别。首先需要来讲解以下图片的作用来帮助你更容易理解下面的内容

一篇文章搞懂 Activity 启动模式

绿色代表在 Activity 任务栈中创建了一个新的 Activity 实例

黄色则代表复用了之前创建的 Activity 实例,但是该 Activity 的 onNewIntent() 方法将会被调用

Standard 启动模式讲解

一篇文章搞懂 Activity 启动模式

如果在 AndroidManifest.xml 中将 Activity B 的启动模式设置为 Standard, 不管任务栈内是否已经存在 Activity B 的实例 ,当启动 Activity B 时,都会创建一个崭新的 Activity B 位于任务栈顶

SingleTask 模式讲解

一篇文章搞懂 Activity 启动模式

如果在 AndroidManifest.xml 中将 Activity C 的启动模式设置为 SingleTask, 如果此时任务栈内已经存在 Activity C 的实例且未位于栈顶 ,当启动 Activity C 时,会将 Activity C 上方的实例全部出栈让其位于任务栈顶并 Activity C 中的 onNewIntent() 方法会被调用

一篇文章搞懂 Activity 启动模式

如果在 AndroidManifest.xml 中将 Activity C 的启动模式设置为 SingleTask, 并且此时任务栈内并不存在 Activity C 的实例 ,当启动 Activity C 时,会创建一个崭新的 Activity C 实例在栈顶

SingleTop 启动模式讲解

一篇文章搞懂 Activity 启动模式

如果在 AndroidManifest.xml 中将 Activity D 的启动模式设置为 SingleTop 并且任务栈内存在 Activity D 实例且位于栈顶时 ,当启动 Activity D 时,会复用之前创建的 Activity D 的实例,并且 onNewIntent() 方法被调用

一篇文章搞懂 Activity 启动模式

如果在 AndroidManifest.xml 中将 Activity D 的启动模式设置为 SingleTop 并且任务栈内并不存在 Activity D 的实例时 ,当启动 Activity D 时,会创建一个崭新的 Activity D 实例在栈顶

一篇文章搞懂 Activity 启动模式

如果在 AndroidManifest.xml 中将 Activity D 的启动模式设置为 SingleTop 并且任务栈内存在 Activity D 的实例但其实例未在栈顶时 ,当启动 Activity D 时,会再次创建一个崭新的 Activity D 实例在栈顶

SingleInstance 模式讲解

一篇文章搞懂 Activity 启动模式

如果在 AndroidManifest.xml 中将 Activity E 的启动模式设置为 SingleInstance, 并且任务栈内不存在 Activity E 的实例 ,当启动 Activity E 时,会在创建一个新的任务栈,并且栈内只有 Activity E 一个实例

如果此时基于上面的任务栈, 从 Activity D 中开启一个启动模式为 Standard 的 Activity F ,那任务栈会发生什么样的变化呢?请看下图

一篇文章搞懂 Activity 启动模式

此时 Activity E 依旧会独立的存在于自己的任务栈中,而新创建的 Activity F 将会和 Activity D 位于相同的任务栈的栈顶

一篇文章搞懂 Activity 启动模式

如果启动模式为 SingleInstance 的 Activity E 已经独立存在于自己的任务栈中 ,此时再启动 Activity E, 则会复用已经创建的 Activity E 的实例,并且 Activity E 的 onNewIntent() 方法被调用

如果基于上面的任务栈, 从 Activity E 中开启一个启动模式为 Standard 的 Activity F ,那任务栈会发什么样的变化呢,请看下图

一篇文章搞懂 Activity 启动模式

因为 singleInstance 的属性是禁止与其他 Activities 共享任务栈,所以启动模式为 SingleInstance 的 Activity 启动其他 Activity 时会默认带有 FLAG_ACTIVITY_NEW_TASK 属性。所以 Activity E 启动 Activity F 后,最后会存在三个任务栈,Activity F 会单独存在于一个任务栈中


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

口碑

口碑

[美] David Meerman Scott / 高游、郭成钢、薛松 / 人民邮电出版社 / 2010-10 / 25.00

Web 2.0时代,怎样让你的产品或创意风靡一时,为百万大众喜闻乐道?本书将为你揭开其中的奥秘。作者将理论创新与实务操作相结合,总结出了利用Web 2.0营销手段制造网络狂欢效应的六条金科玉律,并介绍了一个个生动鲜活的成功范例,如:哈利?波特魔法公园如何策划一场小型活动,达到引爆网络热潮的效果;贝克?霍尔克拉夫特如何通过网络发布音乐作品,从默默无闻成长为全球炙手可热的明星;看似平淡无奇的电子书,如......一起来看看 《口碑》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具