Activity的加载模式:android:launchMode


          1 : standard( 默认处理 ) ,不会使用全新的 Task ,在同一个 Task ,每次都新建 Activity

:singleTop,如果目标activity已经位于Task栈顶,系统不会创建新的目标activity实例;如果没有目标activity位于Task栈顶,新建一个目标activity放入Task的栈顶

    例;如果没有目标activity位于Task栈顶,新建一个目标activity放入Task的栈顶

:singleTask,在同一个Task内只有一个实例activity

activity不存在,系统会创建目标activity的实例,加入Task栈顶

activity已经位于Task栈顶,不会重新创建目标activity的实例

activity已经存在,不在Task栈顶,系统将会把位于该activity上面的所有activity移出Task栈,使目标activity变为栈顶元素

:singleInstance,无论从哪个Task中启动目标activity,只会创建一个目标activity的实例,并会使用一个全新的Task栈来装载该activity实例。这种模式activity总位于           Task栈顶,Task只包含该activity

activity不存在,会创建一个新Task,创建新目标activity的实例,并将它加入新Task栈顶

activity存在,无论位于哪个应用程序中,无论位于哪个Task中,系统将会把activity所在的Task转到前台,显示目标activity。

activity可以被其他应用启动

示例:

1. 首先说standard模式,也就是默认模式,不需要配置launchMode

创建一个ActivityA,通过按钮启动ActivityA,Task中会有若干个ActivityA的实例,按后退键让若干个ActivityA的实例出栈,最后退出应用。

2. singleTop和standard模式,都会将intent发送新的实例(后两种模式不发送到新的实例,如果已经有了的话)不过,singleTop要求如果创建intent的时候栈顶已经有要创建的Activity的实例,则将intent发送给该实例,而不发送给新的实例。上面的示例,如果将Activity的加载模式launchMode=”singleTop”,每次点击按钮启动ActivityA,不会创建ActivityA的实例,后退一次退出应用。

3. 上面两种模式,对应于ActivityA通过按钮启动ActivityB,两种模式的效果一样。

4. singleTask模式:singleTask模式和后面的singleInstance模式都是只创建一个实例的。当intent到来,需要创建singleTask模式Activity的时候,系统会检查栈里面是否已经有该Activity的实例。如果有直接将intent发送给它。上面的示例,如果将ActivityA的加载模式launchMode=”singleTask”,ActivityB的加载模式launchMode=”standard”,ActivityA通过按钮启动ActivityB,创建ActivityB的实例,ActivityB通过按钮启动ActivityA,不会创建ActivityA的实例,会使用原来的ActivityA的实例。

5. singleInstance模式:这个模式下的Activity单独在一个task栈中。这个栈只有一个Activity。

上面的示例:ActivityA通过按钮启动ActivityB,创建ActivityB的实例,而ActivityA在一个栈中,ActivityB在一个栈中,ActivityB通过按钮启动ActivityA,又创建ActivityA的实例,这个实例会放入上一个ActivityA的栈中,按后退键的时候,又回到ActivityA的栈中。