Android intent flags(待续)

FLAG_ACTIVITY_BROUGHT_TO_FRONT

This flag is not normally set by application code, but set for you by the system for the singleTask mode activity.

FLAG_ACTIVITY_CLEAR_TOP
砍掉本任务栈里在被启动Activity之上的所有Activity。For example, consider a task consisting of the activities: A, B, C, D. If D calls startActivity() with an Intent that resolves to the component of activity B, then C and D will be finished and B receive the given Intent, resulting in the stack now being: A, B. 此时如果Activity B的启动模式是默认的multiple,且没有设置 FLAG_ACTIVITY_SINGLE_TOP,那么B会被结束并重建,反之B的onNewIntent()会被调用,不用重建。如果和 FLAG_ACTIVITY_NEW_TASK搭配,则会在别的任务栈(优先选择后台任务栈,其次考虑新建任务栈)里产生同样效果,这点很有用,比如用在Notification manager里启动一个Activity。

FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET
如果设置,这将在Task的Activity stack中设置一个还原点,当Task恢复时,需要清理Activity。也就是说,下一次Task带着FLAG_ACTIVITY_RESET_TASK_IF_NEEDED标记进入前台时(典型的操作是用户在主画面重启它),这个Activity和它之上的都将关闭,以至于用户不能再返回到它们,但是可以回到之前的Activity。
    这在你的程序有分割点的时候很有用。例如,一个e-mail应用程序可能有一个操作是查看一个附件,需要启动图片浏览Activity来显示。这个Activity应该作为e-mail应用程序Task的一部分,因为这是用户在这个Task中触发的操作。然而,当用户离开这个Task,然后从主画面选择e-mail app,我们可能希望回到查看的会话中,但不是查看图片附件,因为这让人困惑。通过在启动图片浏览时设定这个标志,浏览及其它启动的Activity在下次用户返回到mail程序时都将全部清除。

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
如果设置,新的Activity不会在最近启动的Activity的列表中保存。FLAG_ACTIVITY_FORWARD_RESULT 

如果设置,并且这个Intent用于从一个存在的Activity启动一个新的Activity,那么,这个作为答复目标的Activity将会传到这个新的Activity中。这种方式下,新的Activity可以调用setResult(int),并且这个结果值将发送给那个作为答复目标的Activity。总而言之,当一个結果需要运行多个Activity才能得到时用这个flag来传递答复目标。

FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
通常由系统来设置这个flag,if this activity is being launched from history (longpress home key)。

FLAG_ACTIVITY_MULTIPLE_TASK

不要使用这个标志,除非你自己实现了应用程序启动器。与FLAG_ACTIVITY_NEW_TASK结合起来使用,可以禁用把已存的Task送入前台的行为。当设置时,新的Task总是会启动来处理Intent,而不管这是是否已经有一个Task可以处理相同的事情。经过实践,当Activity的launchMode为singleStask时此flag无效,还是把已经启动过的那个Activity放到前台,因此相信singleInstance的Activity同样无效。这是合理的,因为这两种lauchMode的Activity本来在全局范围内就只能有一个实例。

由于默认的系统不包含图形Task管理功能,因此,你不应该使用这个标志,除非你提供给用户一种方式可以返回到已经启动的Task。

如果FLAG_ACTIVITY_NEW_TASK标志没有设置,这个标志被忽略。

FLAG_ACTIVITY_NEW_TASK
如果设置,这个Activity会在一个新建Task的栈顶启动 (这是不一定的,只有该Activity的taskAffinity和当前所有Task(包括当前Task)的affinity不匹配时才成立)。一个Task(从启动它的Activity到下一个Task中的Activity)定义了用户可以迁移的Activity原子组。Task可以移动到前台和后台;在某个特定Task中的所有Activity总是保持相同的次序。

这个标志一般用于呈现“启动”类型的行为:它们提供用户一系列可以单独完成的事情,与启动它们的Activity完全无关。

使用这个标志,如果正在启动的Activity的Task(即以此Activity为栈底的Task)已经在运行的话,那么,新的Activity将不会启动,代替的,这个Task会简单的移入前台(如果它已经在前台的话就什么都不会发生)。参考FLAG_ACTIVITY_MULTIPLE_TASK标志,可以禁用这一行为。如果没有以此Activity为栈底的Task在运行的话就会在一个有相同affinity的Task(没有就新建Task)的栈顶启动此Activity。

这个标志不能用于调用方为了请求結果而启动Activity。因为被启动的Activity和调用方不在同一个进程中,调用方会收到RESULT_CANCELED。

FLAG_ACTIVITY_NO_ANIMATION
在启动Activity的时候不要过渡动画。
FLAG_ACTIVITY_NO_HISTOR
如果设置,新的Activity将不在任务栈中保留。用户一离开它,这个Activity就关闭了。这也可以通过设置noHistory特性。
 FLAG_ACTIVITY_SINGLE_TOP
If set, the activity will not be launched if it is already running at the top of the history stack. Instead the onNewIntent() will be called.


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值