您的位置:首页 > 其它

Activity加载模式

2015-10-05 13:34 337 查看

Activity的加载模式:android:launchMode

1:standard(默认处理),不会使用全新的Task,在同一个Task,每次都新建Activity
2:singleTop,如果目标activity已经位于Task栈顶,系统不会创建新的目标activity实例;如果没有目标activity位于Task栈顶,新建一个目标activity放入Task的栈顶

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

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

1) 如果启动的activity不存在,系统会创建目标activity的实例,加入Task栈顶

2) 如果启动的activity已经位于Task栈顶,不会重新创建目标activity的实例

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

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

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

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

3) Android:exported=”true”表明该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的栈中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: