intent flag介绍

intent几种常见的flags:

1.FLAG_ACTIVITY_NEW_TASK

A应用a ->b应用b

  1. 首先A应用a默认taskAffinity 是A的包的名称B同理

  2. 当Intent对象包含这个标记时,系统会寻找或创建一个新的task来放置目标Activity,寻找时依据目标Activity的taskAffinity属性进行匹配,如果找到一个task的taskAffinity与之相同,就将目标Activity压入此task中,如果查找无果,则创建一个新的task,并将该task的taskAffinity设置为目标Activity的taskActivity,将目标Activity放置于此task

  3. 当a-启动b时候我们先寻找有没有和b一样的taskAffinity如果有直接将b压入,没有则去新建一个task名称为taskAffinity所定义的。如果没定义则默认我B应用的包名称

  4. 当没有设置这个时候a-b-home-a-b顺序是
    home回到a时候显示的是b home回到b是由依旧显示b

  5. 当设置这个flag时候

home回到a时候显示a home回到b时候显示b

2.FLAG_ACTIVITY_CLEAR_TOP

文字概述

当Intent对象包含这个标记时,如果在栈中发现存在Activity实例,则清空这个实例之上的Activity,使其处于栈顶。例如:我们的FirstActivity跳转到SecondActivity,SecondActivity跳转到ThirdActivity,而ThirdActivity又跳到SecondActivity,那么ThirdActivity实例将被弹出栈,使SecondActivity处于栈顶,显示到幕前,栈内只剩下FirstActivity和SecondActivity。这个SecondActivity既可以在onNewIntent()中接收到传来的Intent,也可以把自己销毁之后重新启动来接受这个Intent。在使用默认的“standard”启动模式下,如果没有在Intent使用到FLAG_ACTIVITY_SINGLE_TOP标记,那么它将关闭后重建,如果使用了这个FLAG_ACTIVITY_SINGLE_TOP标记,则会使用已存在的实例;对于其他启动模式,无需再使用FLAG_ACTIVITY_SINGLE_TOP,它都将使用已存在的实例,Intent会被传递到这个实例的onNewIntent()中。

A应用 a-b-c

如果c启动b 设置这个flag

则会清除b之上的这是肯定的 但是b走onNewIntent()还是走销毁重建 决定b启动模式是否用standard

情况一

在使用默认的“standard”启动模式下,

如果没有在Intent使用到FLAG_ACTIVITY_SINGLE_TOP标记,那么它将关闭后重建

情况二

在使用默认的“standard”启动模式下,

如果使用了这个FLAG_ACTIVITY_SINGLE_TOP标记,则会使用已存在的实例走onNewIntent()

请款三

如果我们不想添加FLAG_ACTIVITY_SINGLE_TOP,

那么把SecondActivity的启动模式改为“standard”之外的三种即可,效果和上面一样,都不会创建新的实例。

3.FLAG_ACTIVITY_SINGLE_TOP:

当task中存在目标Activity实例并且位于栈的顶端时,不再创建一个新的,直接利用这个实例。我们在上边的例子中也有讲到

目前发现与Activity启动模式中的singleTop效果相同。

附属:的task相关属性

taskAffinity
launchMode
allowTaskReparenting
alwaysRetainTaskState
clearTaskOnLaunch
finishOnTaskLaunch

allowTaskReparenting 默认为false

情况一 A应用a 跳到 B应用b 设置为true

如果B应用b设置

<activity android:name=".SecondActivity" android:allowTaskReparenting="true">
...			
</activity>

从a跳到b

  1. 首先他们taskid相同

  2. 如果home返回 点击a 此时依旧显示a taskid不变

  3. 如果home返回 点击b 此时依旧是b taskid 不变

  4. 如果b点击返回立马出现a 证明taskid相同

情况二 A应用a 跳到 B应用b 设置为false
则b应用会处于b,taskid中 情况呢true相同但是taskid不同

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值