Activity加载模式及Intent的FLAG使用总结
2014-03-02 22:43
309 查看
一、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的栈顶。例如,从FirstActivity跳转到SecondActivity,SecondActivity跳转到ThirdActivity,而ThirdActivity又跳到SecondActivity,那么ThirdActivity实例将被弹出栈,使SecondActivity处于栈顶,栈内只剩下FirstActivity和SecondActivity。这个SecondActivity既可以在onNewIntent()中接收到传来的Intent,也可以把自己销毁之后重新启动来接受这个Intent。在使用默认的“standard”启动模式下,它将关闭后重建;对于其他启动模式,它都将使用已存在的实例,Intent会被传递到这个实例的onNewIntent()中。即在standard模式下,如果原来的Activity栈顺序为
A -> B1 -> D, 此时D通过FLAG_ACTIVITY_CLEAR_TOP启动B,则栈顺序为A -> B2;对于其他启动模式,则栈顺序为 A-> B1(此时回调onNewIntent()..)。
三、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中销毁。
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的栈顶。例如,从FirstActivity跳转到SecondActivity,SecondActivity跳转到ThirdActivity,而ThirdActivity又跳到SecondActivity,那么ThirdActivity实例将被弹出栈,使SecondActivity处于栈顶,栈内只剩下FirstActivity和SecondActivity。这个SecondActivity既可以在onNewIntent()中接收到传来的Intent,也可以把自己销毁之后重新启动来接受这个Intent。在使用默认的“standard”启动模式下,它将关闭后重建;对于其他启动模式,它都将使用已存在的实例,Intent会被传递到这个实例的onNewIntent()中。即在standard模式下,如果原来的Activity栈顺序为
A -> B1 -> D, 此时D通过FLAG_ACTIVITY_CLEAR_TOP启动B,则栈顺序为A -> B2;对于其他启动模式,则栈顺序为 A-> B1(此时回调onNewIntent()..)。
三、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中销毁。
相关文章推荐
- Activity加载模式及Intent的FLAG使用总结
- 区分Activity的四种加载模式(Activity跳转管理) 和 Intent的常用Flag参数
- 区分Activity的四种加载模式(Activity跳转管理) 和 Intent的常用Flag参数
- Activity的四种加载模式(Activity跳转管理) 和 Intent的常用Flag参数
- 区分Activity的四种加载模式(Activity跳转管理) 和 Intent的常用Flag参数
- 区分Activity的四种加载模式(Activity跳转管理) 和 Intent的常用Flag参数
- 区分Activity的四种加载模式(Activity跳转管理) 和 Intent的常用Flag参数
- 区分Activity的四种加载模式(Activity跳转管理) 和 Intent的常用Flag参数
- Activity intent经常使用的 FLAG 集合(
- Activity intent经常使用的 FLAG 集合
- Activity的4种加载模式最佳解答及Intent常用标识
- Activity的四种加载模式(附:Intent标记位)
- Activity启动模式intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- 【安卓开发-3】Activity的四种启动模式、Intent的显式和隐式使用方式
- Intent启动activity之FLAG_ACTIVITY相关行为使用技巧
- 区分Activity的四种加载模式----以及Intent的setFlags
- Activity的4种加载模式最佳解答及Intent常用标识
- 06 Activity的启动模式 Intent的七大属性的总结
- Activity的4种加载模式最佳解答及Intent常用标识
- Activity的任务栈Task以及启动模式与Intent的Flag详解