Android(java)学习笔记168:Activity 4 种启动模式

时间:2022-03-23 11:49:08

1. 任务栈(task stack):

任务栈 是用来记录用户操作的行为,维护一个用户体验。

一个应用程序一般都是由多个activity组成的。

任务栈(task stack)记录存放用户开启的activity的。
一个应用程序一被开启,系统就给他分配一个任务栈,当所有的activity都退出的时候,任务栈就清空了。
任务栈的id是一个integer的数据类型 自增长的。
在Android操作系统里面会存在多个任务栈,一个应用程序对应着一个任务栈。

下面是发邮件过程理解任务栈:

Android(java)学习笔记168:Activity 4 种启动模式

当我们点击发送之后,Activity C就关闭了,就会从任务栈中消失,这样这时候用户就会看到任务栈顶端是Activity B,这样用户看到就是B;接下来用户在Activity B中点击返回,这样Activity B就会销毁,用户此时就会看到Activity A,在Activity A中点击返回,就会退出这个应用程序。

2. Activity启动模式

可以参看:Activity启动模式图文详解:standard, singleTop, singleTask 以及 singleInstance

在清单文件中activity节点中配置 android:launchMode属性

(1)standard的启动模式,默认标准的启动模式

<activity   android:name ="com.itheima.taskstack.SecondActivity"

                android:launchMode="standard"/>              

     绝大多数的Activity都是采用的standard的启动模式,开启新的Activity,这个Activity就会被加载到任务栈的栈顶。返回退出Activity,就会从任务栈中里面移除。如果任务栈清空,应用程序退出。

例如A启动A,A再接着启动A,A继续启动A,然后再分别出栈,如图所示:

Android(java)学习笔记168:Activity 4 种启动模式

应用场景:绝大多数默认情况

(2)singleTop的启动模式

<activity   android:name ="com.itheima.taskstack.SecondActivity"

                android:launchMode="singleTop"/>  

任务栈顶部只有一个SecondActivity实例存在,如果这个SecondActivity的实例已经被加入任务栈的顶部,这个SecondActivity就不会被重新创建

(用户想不断创建新SecondActivity刷新界面,这里就是行不通的)

Android(java)学习笔记168:Activity 4 种启动模式

应用场景:一个界面避免重复开启很多次。singletop,浏览器的书签

(3)singleTask的启动模式

<activity   android:name ="com.itheima.taskstack.SecondActivity"

                android:launchMode="singleTask"/>  

单一任务栈:在任务栈里面只可以有1个实例存在

如果没有实例,就创建,加入到任务栈的栈顶

如果有实例已经存在,就可以复用这个实例,然后清空这个实例上面的所有的Activity。

Android(java)学习笔记168:Activity 4 种启动模式

应用场景:如果一个Activity的内存开销或者cpu开销非常大。一般我们设置这个Activity为singleTask的启动模式。保证任务栈中里面只有一个实例存在

e.g:

浏览器的BrowserActivity内存开销非常大

webkit浏览器的内核。解析html标签。解析css标签。javaScript解析引擎

(4)singleInstance的启动模式

<activity   android:name ="com.itheima.taskstack.SecondActivity"

                android:launchMode="singleInstance"/>  

前面3种启动模式Activity都是运行在当前的应用程序默任务栈里面

singleInstance是自己单独开启一个任务栈运行

在自己的单独任务栈里面运行,整个手机的操作系统里面只可能同时存在一个singleInstance实例的Activity

假设B启动A,A启动C,其中A的启动模式为singleInstance,则:

Android(java)学习笔记168:Activity 4 种启动模式

应用场景:有道词典,快速取词 ,通话界面等等