Activity启动的Flag

QuibblerQuibbler 2020-03-04 约 5 分钟 1915 次阅读

Activity启动的Flag

Activity有4中启动模式,参考Activity四种启动模式 。启动Activity的Intent添加flag,使用 Intent.addFlags(int flags) 方法。查看源码,可以看到总共有20种:

Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT
    Intent.FLAG_ACTIVITY_CLEAR_TASK
    Intent.FLAG_ACTIVITY_CLEAR_TOP
    Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET
    Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
    Intent.FLAG_ACTIVITY_FORWARD_RESULT
    Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
    Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT
    Intent.FLAG_ACTIVITY_MULTIPLE_TASK
    Intent.FLAG_ACTIVITY_NEW_DOCUMENT
    Intent.FLAG_ACTIVITY_NEW_TASK
    Intent.FLAG_ACTIVITY_NO_ANIMATION
    Intent.FLAG_ACTIVITY_NO_HISTORY
    Intent.FLAG_ACTIVITY_NO_USER_ACTION
    Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP
    Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
    Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
    Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS
    Intent.FLAG_ACTIVITY_SINGLE_TOP
    Intent.FLAG_ACTIVITY_TASK_ON_HOME

后面简单介绍Intent几个常用的Flag。 

1、FLAG_ACTIVITY_CLEAR_TOP

这个Flag有没有很熟悉。SingleTask启动模式自带该Flag,启动SingleTask的Activity,如果该Activity已经存在,会清空该Activity在任务栈之上的活动,并调用onNewIntent()方法。

2、FLAG_ACTIVITY_CLEAR_TASK

能造成在启动Activity前,与Activity关联的任务被清空。启动的Activity成为Task的根,旧的活动都被结束了。该flag只能与FLAG_ACTIVITY_NEW_TASK联合使用。

3、FLAG_ACTIVITY_NEW_TASK

与launchMode的singleTask效果一样。

1. 新Activity会成为新的Task任务栈的的开始。

2. 通常用于具有"launcher"行为的活动:让用户完成一系列事情,完全独立于之前的Activity。

3. 如果新Activity已存在于一个为它运行的任务中,那么不会启动,只会把该任务移到屏幕最前。

4. 如果新Activity要返回result给启动自己的Activity,就不能用这个flag

4、FLAG_ACTIVITY_TASK_ON_HOME

启动的Activity置于Launcher栈顶,效果就是无论如何返回都会返回到桌面。这个Flag特殊设定的应用才会使用,一般不会用这么偏僻的Flag。

参考资料:

         GitHub:ActivityTaskView 

       《Intent.addFlags() 启动Activity的20种flags全解析》

        Activity 启动模式及常见启动Flag总结

taskAffinity

相关推荐