若是英文过关,可以参照:https://developer.android.google.cn/reference/android/content/Intent.html 中Summary部分
(1)FLAG_ACTIVITY_NEW_TASK
同一个应用的时候,不会有预想的效果(没有新建task);
如果当前的task中有被启动的Activity,即使标记为FLAG_ACTIVITY_NEW_TASK,系统也会创建新的实例;
在不同的应用中,
a.使用FLAG_ACTIVITY_NEW_TASK:
举例情况说明:
B应用打开后,A应用启动B应用
流程:
此时存在B1,位于taskB;
A1存在,位于taskA;
A1启动B应用,会产生B2,位于taskB的栈顶部(返回建可以回到B1)
总结:
*启动Activity和被启动的Activity不处于同一个task
*A1启动B时,会新建一个实例B2,而不是打开B1
*B2是位于task的顶部的,若是taskB已经存在,那么位于task顶部
b.不使用FLAG_ACTIVITY_NEW_TASK
即不同应用中默认的时候,A1和B2是同一个task;
(2)FLAG_ACTIVITY_SINGLE_TOP
If set, the activity will not be launched if it is already running at the top of the history stack.
这个大家应该比较熟悉,就不赘述了
(3)FLAG_ACTIVITY_CLEAR_TOP
同一个应用时候
A1启动A2,A2启动A3,A3启动A4;
此时:A4启动A2,但是新建的是A2*;并且此时back,会回到A1;
总结:
* A2,A3,A4都被清除掉了,栈顶是新的A2。
* task相同
上面三个是比较常用的Flag,下面简单介绍剩余的Flag;
(4)FLAG_ACTIVITY_BROUGHT_TO_FRONT
这个标志一般不是由程序代码设置的,如在launchMode中设置singleTask模式时系统帮你设定
(5)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程序时都将全部清除。
(6)FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
如果设置,新的Activity不会在最近启动的Activity的列表中保存
(7)FLAG_ACTIVITY_FORWARD_RESULT
如果设置,并且这个Intent用于从一个存在的Activity启动一个新的Activity,那么,这个作为答复目标的Activity将会传到这个新的Activity中。
这种方式下,新的Activity可以调用setResult(int),并且这个结果值将发送给那个作为答复目标的Activity
(8)FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
这个标志一般不由应用程序代码设置,如果这个Activity是从历史记录里启动的(常按HOME键),那么,系统会帮你设定
(9)FLAG_ACTIVITY_MULTIPLE_TASK
不要使用这个标志,除非你自己实现了应用程序启动器。与FLAG_ACTIVITY_NEW_TASK结合起来使用,可以禁用把已存的Task送入前台的行为。
当设置时,新的Task总是会启动来处理Intent,而不管这是是否已经有一个Task可以处理相同的事情。
由于默认的系统不包含图形Task管理功能,因此,你不应该使用这个标志,除非你提供给用户一种方式可以返回到已经启动的Task。
如果FLAG_ACTIVITY_NEW_TASK标志没有设置,这个标志被忽略
(10)FLAG_ACTIVITY_NO_ANIMATION
如果在Intent中设置,并传递给Context.startActivity()的话,这个标志将阻止系统进入下一个Activity时应用Acitivity迁移动画。
这并不意味着动画将永不运行——如果另一个Activity在启动显示之前,没有指定这个标志,那么,动画将被应用。
这个标志可以很好的用于执行一连串的操作,而动画被看作是更高一级的事件的驱动。
(11)FLAG_ACTIVITY_NO_HISTORY
如果设置,新的Activity将不再历史stack中保留。用户一离开它,这个Activity就关闭了。这也可以通过设置noHistory特性。
(12)FLAG_ACTIVITY_NO_USER_ACTION
如果设置,作为新启动的Activity进入前台时,这个标志将在Activity暂停之前阻止从最前方的Activity回调的onUserLeaveHint()。
典型的,一个Activity可以依赖这个回调指明显式的用户动作引起的Activity移出后台。
这个回调在Activity的生命周期中标记一个合适的点,并关闭一些Notification。
如果一个Activity通过非用户驱动的事件,如来电或闹钟,启动的,这个标志也应该传递给Context.startActivity,保证暂停的Activity不认为用户已经知晓其Notification。
(13)FLAG_ACTIVITY_REORDER_TO_FRONT
如果在Intent中设置,并传递给Context.startActivity(),这个标志将引发已经运行的Activity移动到历史stack的顶端。
例如,假设一个Task由四个Activity组成:A,B,C,D。如果D调用startActivity()来启动Activity B,那么,B会移动到历史stack的顶端,现在的次序变成A,C,D,B。
如果FLAG_ACTIVITY_CLEAR_TOP标志也设置的话,那么这个标志将被忽略