Activity的四种启动模式

简介: 简介:我们一个程序会存在不同的Activity,也会存在许多实例,这些实例就会进入任务栈中,任务栈采用“后进先出”的算法,例如:我们使用手机,打开QQ,在QQ界面进入一个聊天界面,此时存在两个Activity实例,假设我们按一下back键我们将回到QQ主界面,在按一下back键我们将回到屏幕主界面,这就是“后进先出”。


简介:



我们一个程序会存在不同的Activity,也会存在许多实例,这些实例就会进入任务栈中,任务栈采用“后进先出”的算法,例如:我们使用手机,打开QQ,在QQ界面进入一个聊天界面,此时存在两个Activity实例,假设我们按一下back键我们将回到QQ主界面,在按一下back键我们将回到屏幕主界面,这就是“后进先出”。


Activity的四种启动模式

image.png


standard:

系统默认使用此启动模式,特性:无论实例存在与否,每启动一次就创建一个实例,如下图所示

image.png


singleTop:

此启动方法分为两种情况。

一:例如一个任务栈中存在ABCD四个实例,且在D中启动一个启动方法为singleTop的实例D,因为此时任务栈中已经存在D,因此系统会回调OnNewIntent()方式。任务栈中的实例依然为ABCD。

二:依旧任务栈中存在ABCD四个实例,在D中启动一个启动方法为singleTop的实例B,因为B已经存在任务栈中,但并为在栈顶,因此想要启动B,必须创建一个实例B位于栈顶,但之前存在的实例B并未改动,因此任务栈中为ABCDB。

下图为第一种情况:


image.png


singleTask:

此模式与singleTop模式举的第一个例子一样,但如果想在ABCD任务栈中启动一个启动方法为singleTask的实例B,因为singleTask具有clearTop,所有会把比实例B前面的实例清除掉,所有此时任务栈中只存在AB。如下图所示:

image.png



singleInstance:

是singleTask的增强版,具有它的所有特性,还具有用此启动模式启动的activity只能单独处于一个任务栈。

说了四种启动模式,接下来介绍两种方法在哪里设置启动模式,一种是在清单文件中添加,一种是动态添加。

我们先介绍第一种


一:

我们可以看到有四种启动模式可供选择


image.png

image.png


二:

Intent intent = new Intent(); intent.setClass(this,MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);//设置启动模式 startActivity(intent);

优先级:如果两种方式同时存在,我们以设置标志位为优

Activity常用的Flags:

Intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//指定singleTask模式,与在AndroidManifest.xml中指定android:launchMode"singleTask"效果相同
Intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
//指定singleTop模式,与在AndroidManifest.xml中指定android:launchMode"singleTop"效果相同
Intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//具有这个标志的Activity启动时,在同一个任务栈中所有位于它上面的Activity都要出栈,一般会和singleTask模式一起出现,可以理解为我们举例的singleTask第二个例子
Intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
//具有这个标志的Activity不会出现在历史的Activity列表中,它等同于在AndroidManifest.xml中指定android:excludeFromRecents="true"


相关文章
freeswitch 默认拨号方案(下)
freeswitch默认拨号方案中(conf/dialplan/default.xml)设置了一些基本的测试功能和PBX电话系统功能 包含了分机互拨及简单IVR功能
|
10月前
|
设计模式 JavaScript 安全
TypeScript性能优化及代码质量提升的重要性、方法与策略,包括合理使用类型注解、减少类型断言、优化模块导入导出、遵循编码规范、加强代码注释等
本文深入探讨了TypeScript性能优化及代码质量提升的重要性、方法与策略,包括合理使用类型注解、减少类型断言、优化模块导入导出、遵循编码规范、加强代码注释等,旨在帮助开发者在保证代码质量的同时,实现高效的性能优化,提升用户体验和项目稳定性。
231 6
|
10月前
|
存储 开发者
递归比较的优缺点是什么?
【10月更文挑战第29天】递归比较是一种在处理复杂数据结构时常用的比较方法,尤其适用于对象和数组等引用类型数据的深度比较。
|
12月前
|
canal Kubernetes Perl
Network Policy及应用
文章主要介绍了如何在Kubernetes中使用Network Policy进行网络策略配置,包括如何部署Calico网络模型来支持网络策略,以及如何通过设置不同的网络策略来控制不同命名空间下Pods之间的访问权限。
148 4
Network Policy及应用
|
存储 SQL 分布式计算
MaxCompute 近实时增全量处理一体化新架构和使用场景介绍
本文主要介绍基于 MaxCompute 的离线近实时一体化新架构如何来支持这些综合的业务场景,提供基于Delta Table的近实时增全量一体的数据存储和计算解决方案。
142279 4
MaxCompute 近实时增全量处理一体化新架构和使用场景介绍
|
安全 大数据 数据库
现代图书馆管理系统的设计与应用
现代社会信息量急剧增加,图书馆作为知识的仓库和传播中心,承载着重要的社会功能。随着科技的发展,传统的图书馆管理方式已经无法满足日益增长的需求,因此图书馆管理系统应运而生。本文将探讨图书馆管理系统的设计原理、功能特点以及应用效果,旨在为图书馆管理者提供参考,促进图书馆管理水平的提升。
726 0
|
数据安全/隐私保护
【安装教程】【FormatFactory(格式工厂)】(附带安装包下载)
【安装教程】【FormatFactory(格式工厂)】(附带安装包下载)
701 0
【安装教程】【FormatFactory(格式工厂)】(附带安装包下载)
【word小技巧】插入三阶以上的矩阵
简介:【word小技巧】插入三阶以上的矩阵
【word小技巧】插入三阶以上的矩阵
|
消息中间件 并行计算 Java
match-trade超高效的交易所撮合引擎
match-trade超高效的交易所撮合引擎