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

一、Activity的加载模式

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

2、singleTop:若当前task的栈顶activity就是要启动的activity,则不会生成新的activity实例,而是回调已有activity的onNewIntent()方法;否则,在当前task的栈顶生成新的该activity的实例。

3、singleTask:首先寻找是否有与要启动的activity具有相同affinity的task。若没有,则生成一个新的task,并将该activity放入其中(该新task的affinity就是该activity的affinity);若有,则判断该activity在该task中是否已存在,若存在,则销毁该activity之上的其他所有activity,并回调该activity的onNewIntent()方法,若不存在,则直接将该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中运行,则不会启动新的activity,而是把当前task整体切换到前台,反之,则将该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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值