Android 之 Activity的加载模式

                                                     
Activity 的加载模式

1)概念:

加载模式决定以哪种方式启动一个跳转到原来某个Activity实例;

2)起因:

在Android开发中,activity之间的跳转可能需要有多种方式,有时是普通的生成一个新实例,有时希望跳转到原来某个activity实例,而不是生成大量的重复的activity;

3)加载模式的种类:

在android中,activity有四种加载模式:standard,singleTop,singleTask,singleInstance;

4)配置:

直接修改AndroidMainfest.xml文件,例如:

<activityandroid:name=”.NewActivity”android:launchMode=”singleTask”>

</activity>

5)四种加载模式的介绍:

a)Standard:系统默认模式,一次跳转即会生成一个新的实例;

b)SingleTop:和standard类似,唯一的区别就是当跳转的对象是位于栈顶的activity时,程序将不会生成一个新的activity实例,而是直接跳到现在存于栈顶的那个activity实例;

c)SingleTask:singleTask模式和后面的singleInstance模式都只是创建一个实例;该模式下,无论调转的对象是不是位于栈顶的activity,程序都不会生成一个新的实例(前提是该栈中已经存在了这个实例);

提示:一般不要将除开始页面的其他页面设置为singleTask模式;

d)SingleInstance:activity独占一个task(可以理解为进程),独占一个task的activity可以相当于是一个应用,这个应用与其他的activity是独立的,他有自己的上下文activity;

例如:现有三个activity,a1,a2,a3,a2设置为singleInstance模式,那么调转关系如下:a1-a2-a3,在a3中按返回,由于a2位于一个独立的task中,它不数据a3的上下文activity,所以此时将直接返回得到a1,a1再返回程序并没有结束,而是得到a2,再返回就结束了程序;

e)四种加载模式的主要区别:

所属Task的区别

一般情况下,standard和singleTop两种模式的的资源在同一个Task里面,除非Intent包含了参数FLAG_ACTIVITY_NEW_TASK,则目标activity启动会到新的Task里面

是否允许多个实例的区别:

Starndrd和singleTop可以允许有多个实例,并可以位于不同的task中;singleTop要求activityStack栈顶已经要目标acvitivy实例,有就不创建,没有就创建

SingleTask和singleInstance只产生一个实例,并且是task的根元素

是否允许其他Activity存在于本Task内的区别:

SingleInstance独占一个Task,其他Activity均不能村在于此Task中,如果它启动一个新的Activity,不管新的Activity的launchmode如何,新的Activity都将运行于其他Task里;

另外三种模式则可以和其他Activity共存;

每次是否生成新实例:

Standard:每次都生成一个新的Activity实例;

singleTop:的Activity如果在Task的ActivityStack顶部则不生成新的实例,直接使用,否则生成一个新的实例;

singleInstance:是其所在的Task的Activity的ActivityStack里的唯一的Activity实例,每次都会被重用;

singleTask:如果在Task的ActivityStack的顶部,则接收intent,否则会被丢弃,但仍然会返回前台;

相关推荐