Activity加载模式及Intent的FLAG使用总结

一、Activity的加载模式

1、stardard:默认的launchmode。使用此属性时,不管要启动的activity在当前task中是否已存在,系统都会在当前task的栈顶生成该activity的新的实例。

2、singleTop:若当前task的栈顶activity就是要启动的activity,则不会生成新的activity实例;否则,在当前task的栈顶生成新的该activity的实例。

3、singleTask:首先寻找是否有与要启动的activity具有相同affinity的task。若没有,则生成一个新的task,并将该activity放入其中(该新task的affinity就是该activity的affinity);若有,则判断该activity在该task中是否已存在,若存在,则销毁该activity之上的其他所有activity,若不存在,则直接将该activity添加到该task的栈顶。

4、singleInstance:启动一个新的task并将该activity放入其中,该task永远都只会容纳这个activity。若该activity再次启动该activity,则这个新的task不会生成该activity的新的实例。若该activity要启动activityB(activityB为默认的启动模式),则首先会寻找是否有与activityB具有相同affinity的task,若有,则将activityB添加到该task的栈顶;若没有,则创建一个新的task并将activityB放入其中。

 

二、Intent的FLAG

1、FLAG_ACTIVITY_NEW_TASK:首先寻找是否有与要启动的activity具有相同affinity的task。若没有,则生成一个新的task,并将该activity放入其中(该新task的affinity就是该activity的affinity);若有,则将该activity添加到该task的栈顶。

2、FLAG_ACTIVITY_SINGLE_TOP:同launch mode的singleTop。

3、FLAG_ACTIVITY_CLEAR_TOP:若该activity在该task中已存在,则销毁该activity之上的其他所有activity;若不存在,则直接将该activity添加到该task的栈顶。

 

三、Activity的其他属性

1、allowTaskReparenting:若某activity的该属性设置为“true”,则允许activity重新附属到与其具有相同affinity的task中。若某activity当前位于TaskA中(默认affinity不相同),则当TaskA回到后台并再次回到前台时,该activity已经不在TaskA中了;而如果启动与该activity具有相同affinity的TaskB,则该activity此时位于TaskB的栈顶。

2、alwaysRetainTaskState:默认情况下,当一个task处于后台很长时间后,系统会销毁该task中除了rootactivity之外的其他所有activity,因此当该task再次回到前台时,显示的是root activity。若task中的root activity的该属性设置为“true”,则系统不会这样做。

3、clearTaskOnLaunch:若task中的root activity的该属性设置为“true”,则当task处于后台时,即使时间很短,当task再次回到前台时,系统会销毁该task中除了root activity之外的其他所有activity,界面显示的是root activity。

4、finishOnTaskLaunch:若某activity的该属性设置为“true”,当task回到后台并再次回到前台时,该activity会从task中销毁。


你可能感兴趣的:(android,Activity,flag,task,mode,Launch)