您的位置:首页 > 移动开发 > Android开发

Activity(活动)的启动模式详解

2016-04-13 15:22 393 查看
Activity有四种启动模式:分别是standard,singleTop,singleTask,singleInstance.

在AndroidMenifest中通过给标签设置android:launchMode来给Activity设定启动模式 ,如下图所示:

<activity
android:name="com.app.mode.B"
android:launchMode="singleInstance" />


在一个Android应用中是通过任务(Task)来管理活动的,一个任务是指存放在栈中的所有活动的集合,其中这个栈称为返回栈,也可叫任务栈。在默认的情况下,系统只会创建一个默认的任务栈(栈的名称就是应用程序的包名)来存放所有的活动.然而通过设定android:launchMode就可以创建另外一个任务栈出来。

比如singleInstance模式就会一个新的独立的任务栈,而且只放置一个活动。

singleTask结合TaskAffinity也可以创建出另外一个新任务栈,

而这种新创建的任务栈是不同于系统默认的任务栈。

standard

标准模式,也是系统默认的模式,每启动一个Actiivity都会创建一个新的实例。比如ActivityA是标准模式,那么每次启动一次ActivityA,都会产生一个新的实例。

在这种模式下,若X(Activity)启动了这个Y(Activity,标准模式),那么Y就运行在启动它的X所在的任务栈中。(若X是singleInstance模式除外)。



singleTop

栈顶复用模式。如果新启动的Activity已经存在位于任务栈的栈顶,那么此Activity不会被创建同时会回调它的onNewIntent方法;如果新启动的Activity不存在或者存在但不是位于任务栈的栈顶,那么此Activity任然会重新创建。

在这种模式下,若X(Activity)启动了这个Y(Activity,栈顶复用模式),那么Y就运行在启动它的X所在的任务栈中。(若X是singleInstance模式除外)。



singleTask

栈内复用模式。是一种单实例模式,如果新启动的Activity已经存在于一个任务栈内了,那么多次启动此Activity都不会创建新的实例,同时也会回调它的onNewIntent方法。如果新启动的Activity不存在,就会重新创建一个任务栈并把这个Activity放入栈中。

在这种模式下,若X(Activity)启动了这个Y(Activity,栈内复用模式),这时候要看看Y有没有在标签内设置TaskAffinity(TaskAffinity标识了一个Activity所需要的任务栈的名称)的值。

如果没有设定,Y就运行在X所在的任务栈中(若X是singleInstance模式除外);

若已经设定,Y就运行在另一个任务栈中,而且任务栈的名称是设定的TaskAffinity的值;

补充一下;:TaskAffinity属性只有在singleTask模式下,才有意义,在其他模式下,不起作用。





singleInstance

单实例模式,而且是一种加强了的singleTask模式,具有singleTask模式的所有特性外,还加强了一点那就是此种模式的Activity只能单独位于一个任务栈中。比如ActivityA是singleInstance模式,当ActivityA启动后,系统会为它创建一个新的任务栈,然后A独自运行在这个任务栈中,由于栈内复用特性,后续的请求均不会创建新的实例。

在这种模式下,若X(Activity)启动了这个Y(Activity,singleInstance模式),那么Y就运行在另外一个任务栈中。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息