Android 高级开发笔记 第二章 Activity的启动模式

来源:互联网 发布:时间片轮转调度算法 编辑:程序博客网 时间:2024/05/19 23:27

大家好,我是听者,欢迎阅读Android 高级开发笔记系列之Activity的启动模式。

在学习启动模式之前我们需要了解一下为什么Activity需要启动模式,众所周知,Android是通过任务栈的方式来管理Activity,系统会为每一个应用程序分配一个栈,栈就是要遵循“后进先出”的原则,即每次start一个Activity时,就压入栈中,所以Activity的启动模式即是指定Activity将压入栈中的方式。下面我们就学习一下Activity的四种launchMode:

一、launchMode的简介:

1. standard:标准启动模式也是系统默认的启动模式,如果B Activity设置了该模式,那么 A Activity 启动了 B Activity那么B Activity 将会压入A Activity所在的栈中,不论A和B是否属于同一个应用程序。

2.singleTop:栈顶复用模式,即如果 A Activity 位于目标栈的栈顶的话,再次启动 A Activity时,A 将不会被创建,直接调用其onNewIntent方法。

3.singleTask:栈内复用模式,即如果Activity A 设置了singleTask,当启动 A 时,如果目标栈中不存在A的实例,那么创建一个A压入目标栈中,如果存在A的实例,调用A的onNewIntent方法,将栈中A上方的全部移出栈,将A位于栈顶。例如:

4.singleInstance:单例模式,即如果Activity A 设置了singleInstance启动模式,如果目标栈S1启动Activity A,如果A的独立栈不存在,那么将会为A创建独立栈,然后将其压入栈中,当目标栈S2再次启动Activity A时,此时A的独立栈存在,直接复用A。


二、举例说明四种启动模式:

当前Activity栈中有ABCD四个Activity,A位于栈低,D位于栈顶:

1.ABCD全部设置成standard启动模式,设X是四个Activity的任意一个,启动X那么该目标任务栈的情况为ABCDX。

2.ABCD全部设置成singleTop启动模式,当启动D时,那么调用D的onNewIntent该目标任务栈的情况为ABCD;当启动B时,该目标任务栈的情况为ABCD。当启动B时,创建B,该目标任务栈的情况为ABCDB。

3.ABCD全部设置成singleTask启动模式,当启动D时,调用D的onNewIntent该目标任务栈的情况为ABCD;当启动B时,调用B的onNewIntent,C、D移出栈,该目标任务栈的情况为AB。

4.当E Activity的启动模式设置为singleInstance时,启动E,将会为E创建一个新的任务栈,再次启动E时,直接调用E的onNewIntent.

好的,今天就介绍到这里,如果有什么疑问,欢迎加入  Android高级开发交流群 群号: 474440973,听者在北京等你!


1 0