Android Activity标记位

1、Intent.FLAG_ACTIVITY_CLEAR_TOP  Intent.FLAG_ACTIVITY_SINGLE_TOP
启动一个TargetActivity,设置标记Intent.FLAG_ACTIVITY_CLEAR_TOP,与TargetActivity属于同一个任务栈并且处于TargetActivity之上的Activity将会出栈,当前启动的TargetActivity将处于目标栈栈顶,如果没有设置Intent.FLAG_ACTIVITY_SINGLE_TOP,那么在目标栈中的旧的TargetActivity(如果存在的话)将会被关闭并生成一个新实例代替,如果设置了Intent.FLAG_ACTIVITY_SINGLE_TOP,TargetActivity就不会重新实例化,会调用onNewIntent()


 2、Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET(API21被Intent.FLAG_ACTIVITY_NEW_DOCUMENT替代 )

 A启动B,Intent设置Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET, 当A所在的任务栈重新回到前台时,B以及B之上的Activity将离开这个任务栈。
例如启动B之后按Home键回到桌面,如果点应用图标启动这个应用,将显示A,无法再回到B。
 如果查看菜单,会显示两个任务栈,选择B所在的任务栈,一直返回最后会回到桌面,无法再回到A所在的任务栈。
也就是说,下一次Task带着 FLAG_ACTIVITY_RESET_TASK_IF_NEEDED标记进入前台时,需要清理Activity。

3、Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

新启动的Activity不添加到最近应用列表,我们从最近应用里面查看不到我们启动的这个Activity

例如A启动B B放在新的任务栈中 如果设置Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 那么最近应用列表将看不到B所在的任务


4、Intent.FLAG_ACTIVITY_FORWARD_RESULT
如果设置,那么回调结果将不返回给启动它的Activity,而是返回更上一级
例如三个Activity A、B、C , A startActivityForResult启动B,B启动C,B启动C时设置 Intent.FLAG_ACTIVITY_FORWARD_RESULT ,C setResult后结果将会返回给A而不是B

5、Intent.FLAG_ACTIVITY_NEW_TASK(与taskAffinity配合使用)
如果设置,这个Activity将会处在一个新的任务栈中。如果正在启动的Activity的Task已经在运行的话,那么Activity不会产生新的实例,而是当前Task会简单的移入前台。
例如三个Activity A、B、C , A启动B,B启动C,两次启动均携带Intent.FLAG_ACTIVITY_NEW_TASK标志位 A、B、C taskAffinity均不同.
此时会有三个任务栈,A、B、C分别处于不同的任务栈,C 再启动B并携带Intent.FLAG_ACTIVITY_NEW_TASK,
此时B不会重新实例化,B的任务栈会被直接置于前台.
假设B再启动一次C但是不携带Intent.FLAG_ACTIVITY_NEW_TASK,此时B所在的任务栈会有一个新的C实例,此处称之为D,
如果在D中再次启动B并携带Intent.FLAG_ACTIVITY_NEW_TASK标志位,我们会发现没有任何变化,
因为当前D和B处于同一个任务栈,再次通过携带Intent.FLAG_ACTIVITY_NEW_TASK标志位启动B时,当前所请求的任务栈中B已经存在,
 B所在的任务栈会直接被置于前台,而此时D刚好处于该任务栈栈顶,所以看不到任何变化

6、Intent.FLAG_ACTIVITY_NO_HISTORY
如果设置,新的Activity将不再历史stack中保留。用户一离开它,这个Activity就关闭了。
例如两个Activity A、B。A启动B并携带Intent.FLAG_ACTIVITY_NO_HISTORY,按Home键回到桌面,再通过任务表回到应用,此时显示的是A

7、Intent.FLAG_ACTIVITY_NO_USER_ACTION
主要影响onUserLeaveHint(),新的Activity启动后要置于前台之前,当前的正在运行的Activity被置于后台,作为用户行为,当前的正在运行的Activity会触发回调onUserLeaveHint
如果启动新Activity携带Intent.FLAG_ACTIVITY_NO_USER_ACTION标志位,那么会阻止当前的正在运行的Activity触发回调onUserLeaveHint

 8、Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
 携带该标志启动Activity,被启动的Activity将被移动到栈顶
 例如四个Activity A、B、C、D。A启动B,B启动C、C启动D。此时任务栈为ABCD。
 如果D再启动A并携带Intent.FLAG_ACTIVITY_REORDER_TO_FRONT,A将被置于栈顶此时任务栈为BCDA。

 其他还有一些标记位 可查看相关文档

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值