通过Intent启动Activity,可以设置Flag,也就是setFlags()方法,当然还有addFlags()方法(两者区别就是一个是设置,一个是追加,不难理解),通过设置不同的Flag以达到对任务战的处理和启动新Activity过程处理。下面整理了一下各种Flag的作用,目前只是初步整理很多标志还没有实际使用过,以后会进行完善。

FLAG_ACTIVITY_SINGLE_TOP
 如果设置成这种标记,当栈顶的Activity和要启动的Activity一样时就回复用栈顶的Activity而不创建新的。

 (简而言之会退栈ABC启动C之后回退站还是ABC而不是ABCC)




FLAG_ACTIVITY_NEW_TASK
 如果设置该标记,Activity将在一个全新的栈中创建

 一般通过广播启动Activity要用到,否则会报错。




FLAG_ACTIVITY_CLEAR_TOP
如果设置成该标记,启动Activity会先查找栈中是否已经存在该Activity,如果存在则移除
该Activity顶部所有Activity再复用该Activity。
(简而言之,当前栈中ABCD以该模式启动B则栈中变成了AB)




FLAG_ACTIVITY_NO_HISTORY
如果设置了该标记,新的Activity将不会被压入回退栈中,一旦用户离开则该Activity将被立即结束。

注:在这种模式启动的Activity中的onActivityResult()方法不会被startActivityForResult的Activity的Result唤起

(简而言之就是拿不到Result,离开直接finish了还怎么拿?)




FLAG_ACTIVITY_PREVIOUS_IS_TOP
如果设置该标记,当前Activity不会作为栈顶来启动新的Activity而是当前Activity的前一个作为栈顶。

(简而言之,栈ABC启动D则栈变成ABD)






FLAG_ACTIVITY_FORWARD_RESULT

如果设置,并且这个Intent用于从一个存在的Activity启动一个新的Activity,那么,这个
作为答复目标的Activity将会传到这个新的Activity中。这种方式下,新的Activity可以调用
setResult(int),并且这个结果值将发送给那个作为答复目标的Activity。
(简而言之,A从B中获取result,B通过该模式启动C,则A从C中获取result)




FLAG_ACTIVITY_MULTIPLE_TASK
在一个新的的栈中创建Activity,区别于FLAG_ACTIVITY_NEW_TASK是会先查找已有的栈是否
有匹配的栈,没有才创建。




FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
如果给Intent对象设置了这个标记,那么新的Activity不会被保留在最近启动的Activity的列表中。


FLAG_ACTIVITY_BROUGHT_TO_FRONT
应用程序代码中通常不设置这个标记,而是由系统给单任务启动模式的Activity的设置。


FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
如果设置该标记,这个activity将在一个新的task中启动或者或者被带到一个已经存在
的task的顶部,这时这个activity将会作为这个task的首个页面加载。将会导致与这个
应用具有相同亲和力的task处于一个合适的状态(移动activity到这个task或者从中移
出),或者简单的重置这个task到它的初始状态


FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
这个标记通常不由应用程序代码来设置,如果是从历史中启动这个Activity,系统就会设置这个标记。


FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET
如果设置,这将在Task的Activity stack中设置一个还原点,当Task恢复时,需要清理
Activity。也就是说,下一次Task带着 FLAG_ACTIVITY_RESET_TASK_IF_NEEDED标记进入前
台时(典型的操作是用户在主画面重启它),这个Activity和它之上的都将关闭,以至于用户不能再
返回到它们,但是可以回到之前的Activity。


FLAG_ACTIVITY_NEW_DOCUMENT
FLAG_ACTIVITY_NEW_DOCUMENT = FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET


FLAG_ACTIVITY_NO_USER_ACTION
如果设置,作为新启动的Activity进入前台时,这个标志将在Activity暂停之前阻止从最前方的Activity回调
的onUserLeaveHiint}
典型的,一个Activity可以依赖这个回调指明显式的用户动作引起的Activity移出后台。这个回调在Activity的
生命周期中标记一个合适的点,并关闭一些Notifica
如果一个Activity通过非用户驱动的事件,如来电或闹钟,启动的,这个标志也应该
传递给Context.startActivity,保证暂停的Activity不认为用户已经知晓其Notifica


FLAG_ACTIVITY_REORDER_TO_FRONT
如果在Intent中设置,并传递给Context.startActivity(),这个标志将引发已经
运行的Activity移动到历史stack的顶端。
(简而言之,栈ABCD启动B则变成ACDB)
注:如果FLAG_ACTIVITY_CLEAR_TOP标志也设置的话,那么这个标志将被忽略。


FLAG_ACTIVITY_NO_ANIMATION
如果在Intent中设置,并传递给Context.startActivity()的话,这个标志将阻止系
统进入下一个Activity时应用 Acitivity迁移动画。这并不意味着动画将永不运行——如果
另一个Activity在启动显示之前,没有指定这个标志,那么,动画将被应用。这个标志可以很
好的用于执行一连串的操作,而动画被看作是更高一级的事件的驱动。
(简而言之,跳过动画)


FLAG_ACTIVITY_CLEAR_TASK
如果给Intent对象添加了这个标记,那么在Activity被启动之前,会导致跟这个Activity关联的
任何既存的栈都被清除。也就是说新的Activity会成为一个空栈的根,而其他任何Activity都会被销毁。
通常和FLAG_ACTIVITY_NEW_TASK一起使用。


FLAG_ACTIVITY_TASK_ON_HOME
如果给Intent对象设置了这个标记,那么它会导致新启动的栈被放到当前的主Activity栈之上。
如果再新栈中的最底部Activity中返回会返回到原来的栈顶。
(简而言之,就是把新栈压入老栈存在的栈)
注:只能和FLAG_ACTIVITY_NEW_TASK一起使用


FLAG_ACTIVITY_RETAIN_IN_RECENTS
默认情况下通过FLAG_ACTIVITY_NEW_DOCUMENT启动的Activity在关闭之后,Task中的记录会相对应的
删除。如果为了能够重新启动这个Activity你想保留它,就可以使用这个flag,最近的记录将会保留在接口
中以便用户去重新启动。接受该Flag的Activity可以使用autoRemoveFromRecents去复写这个request
或者调用Activity.finishAndRemoveTask( )方法。


FLAG_ACTIVITY_LAUNCH_ADJACENT
此标志仅用于分屏多窗口模式,新的Activity将会在与启动它的Activity相邻位置显示出来,
只能与FLAG_ACTIVITY_NEW_TASK或FLAG_ACTIVITY_MULTIPLE_TASK结合使用。