lauchMode与Intent的flag的解释与示例

activity的launchMode属性可以控制其被打开时与启动其的所在的task之间的关系,它有以下几个属性.

standard 

系统在启动该activity的task中创建该activity.

例:

back stack 初: A B C

C start D

back stack 后: A B C D


singleTop 

如果当前task的顶部已经有该activity的一个实例,则系统将intent传入给顶部activity的onNewIntent方法,而不是创建一个新的实例.

例:

back stack 初: A B C

C start C

back stack 后: A B C (C的onNewIntent方法被调用)


例:

back stack 初: A B C

C start B

back stack 后: A B C B


singleTask

系统会创建一个新的task并且创建该activity作为该task的root.但是,如果在其他的task中已经有该activity的实例,系统将会把intent传到那个activity实例的onNewIntent方法,而不是创建一个新实例.也就是说,同一时间只能有一个该activity实例存在.

以下三个例子前提为 启动的activity所在的task和被启动的activity的 affinity不同

例:

back stack A 初: A B C

C start D

back stack A 后: A B C

back stack B 新: D


例:

back stack A 初: A B

back stack B 初: C 

B start C

back stack A 后: A B

back stack B 后: C (C的onNewIntent方法会被调用)


例:

back stack A 初: A B

back stack B 初: C D

B start C

back stack A 后: A B

back stack B 后: C (D会被销毁,C的onNewIntent被调用)


singleInstance

与singleTask几乎相同,但系统不会将任何其他的activity加入到该activity所在的task中,也就是说,该activity独自存在一个task中,任何新启动的activity都会在其他的ask中启动.


Intent的flag属性可以控制被启动的activity与当前task的关系,它优先于activity的launchMode,又与launchMode有一些联系.

FLAG_ACTIVITY_NEW_TASK 等同于 singleTask

FLAG_ACTIVITY_SINGLE_TOP 等同于 singleTop


FLAG_ACTIVITY_CLEAR_TOP 如果当前task中有该activity实例,那么在该activity之上的activity全部会被销毁,该activity的onNewIntent被调用.

例:

当B的lauchMode是standard时

back stack A 初: A B C

C start B

back stack A 后: A B (C B 分别被销毁,B被重新创建) 


当B的lauchMode不是standard时

back stack A 初: A B C

C start B

back stack A 后: A B (C被销毁,B的onNewIntent被调用)


转载请注明,谢谢.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值