配置Activity时可指定android:launchMode 属性,该属性用于配置该Activity的加载模式。该属性支持以下4个属性值。
> standard:标准模式,这是默认的加载模式。
> singleTop:Task栈顶单利模式。
> singleTask:task内单例模式。
> singleInstance:全局单例模式。
先介绍一下啊Android对Activity的管理。Android 采用Task来管理多个Activity,事实上,我们可以把Task理解为Activity栈,Task以栈的形式来管理Activity:先启动的Activity会被放在Task的栈底,后启动的被放在Task的栈顶。
那么Activity的加载模式,就负责管理实例化、加载Activity的方式,并可以控制Activity与Task之间的加载关系。
下面详细介绍这4种启动模式。
1.standard模式
如果没有在AndroidManifest文件中配置Activity的launchMode属性,该Activity默认采用standard的启动方式。
每次通过这种模式来启动目标Activity时,Android总会为目标Activity创建一个新的实例,并将该Activity添加到当前的Task栈中--这种模式不会启动新的Task,新的Activity将被添加到原有的Task中。
2.singleTop模式
这种模式与standard模式基本相似,但有一点不同:当将要启动的目标Activity已经位于Task栈顶时,系统不会ch重新创建目标Activity的实例,而是直接复用已有的Activity的实例。
如果要启动的目标Activity没有位于Task栈顶,此时系统会重新创建目标Activity的实例,并将它加载到Task栈顶--此时与standard模式完全形同。
3.singleTask模式
采用这种加载模式的Activity在同一个Task内只有一个实例,当采用singleTask模式启动Activity时,可以分为如下三个情况。
>如果将要启动的目标Activity不存在,系统将会创建目标Activity的实例,并将它加入Task栈顶。
>如果将要启动的目标Activity已经存在于Task的栈顶,此时与singleTop模式的行为相同。
>如果将要启动的目标Activity已存在、但没有位于Task栈顶,系统将会把位于该Activity上面的所有的Activity移出Task栈,从未使目标Activity转入栈顶。
4.singleInstance
在这种启动模式下,系统保证无论从哪个task中启动目标Activity,只会创建一个目标Activity实例,并会使用一个全新的Task栈来加载该Activity实例。
当系统使用singleInstance模式启动目标Activity的时候,可以分为两种情况。
>如果要启动的目标Activity不存在,系统将先创建一个全新的Task,在创建目标Activity的实例,并将它加入新的Task栈顶。
>如果要启动的目标Activity已经存在,无论它位于哪个应用程序中、位于哪个Task栈中,系统都会把该Activity所在的Task转到前台,从而使该Activity显示出来。
需要指出的是,采用singleInstance模式加载Activity总是位于Task的栈顶,且采用singleInstance模式加载的Activity所在Task将只包含该Activity。