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
精彩的人生需要浪漫、无畏和勇气。