Intent flag参数和Android的四种lauchMode

一. Intent flag 常用的参数

  1. FLAG_ACTIVITY_CLEAR_TOP
    假设当前栈中有A,B,C,D四个Activity。D此时通过intent跳转到B,如果添加这个flag,那么栈变为A,B。
  2. FLAG_ACTIVITY_NEW_TASK
    假设当前栈中有A,B,C三个Activity。C通过Intent跳转到D,如果添加这个flag,并且如果D Activity在manifest.xml 中的申明添加了Task Affinity,系统会先查找有没有和D的Task Affinity相同的栈存在。如果存在,将D压入那个栈中,如果不存在,将会新建一个D的Affinity的栈将其压入;如果D的Task Affinity默认没有设置,则将D直接压入A,B,C所在的栈中,原来的栈变成A,B,C,D4个activity。
  3. FLAG_ACTIVITY_NO_HISTORY
    假设当前栈中有A,B,C四个Activity。如果C想要通过Intent跳转到D,这个Intent添加此标记后,手机屏幕上会显示D的内容,但是当前栈中仍然是A,B,C三个Activity。
  4. FLAG_ACTIVITY_SINGLE_TOP
    如果Intent的目标Activity就是栈顶Activity,那么将不会新建一个实例压入栈中。

二.Android的四种lauchMode

<activity android:name="FirstActivity"
android:launchMode="standard|singleTop|singleTask|singleInstance"></activity>
  1. standard
    Activity每次start的时候都会,都会有初始化一个新的实例加入到栈中。
  2. singleTop
    可以多次实例,但是如果处于当前栈顶并且接受一个与当前Activity一样类型的Intent,那么不会创建新的实例,而是触发onNewIntent()事件。
  3. singleTask
    系统会创建一个新的Task(如果没有启动应用)和一个Activity实例在Task根部;如果Activity实例已存在单独的Task中,系统会调用已存在Activity的onNewIntent()方法。这种情况下,系统不会让其他的Activity运行在所有持有的Task实例中。
  4. singleInstance
    和singleTask类似,除了系统不会让其他的Activity运行在所持有的task实例中,这个Activity是独立的,并且task的成员只有它,任何其他Activity运行这个Activity都将打开一个独立的task。

Activity的Task Affinity属性指出了它希望进入的Task。如果一个Activity没有显式的指明该Activity的task Affinity属性,那么它的这个属性就等于Application指明的taskAffinity,如果 Application也没有指明,那么该taskAffinity的值就等于包名。而Task也有自己的affinity属性,它的值等于它的根 Activity的taskAffinity的值

本博客参考http://www.open-open.com/lib/view/open1345173373350.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值