1、Intent.FLAG_ACTIVITY_CLEAR_TOP Intent.FLAG_ACTIVITY_SINGLE_TOP
启动一个TargetActivity,设置标记Intent.FLAG_ACTIVITY_CLEAR_TOP,与TargetActivity属于同一个任务栈并且处于TargetActivity之上的Activity将会出栈,当前启动的TargetActivity将处于目标栈栈顶,如果没有设置Intent.FLAG_ACTIVITY_SINGLE_TOP,那么在目标栈中的旧的TargetActivity(如果存在的话)将会被关闭并生成一个新实例代替,如果设置了Intent.FLAG_ACTIVITY_SINGLE_TOP,TargetActivity就不会重新实例化,会调用onNewIntent()
例如启动B之后按Home键回到桌面,如果点应用图标启动这个应用,将显示A,无法再回到B。
如果查看菜单,会显示两个任务栈,选择B所在的任务栈,一直返回最后会回到桌面,无法再回到A所在的任务栈。
也就是说,下一次Task带着 FLAG_ACTIVITY_RESET_TASK_IF_NEEDED标记进入前台时,需要清理Activity。
3、Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
如果设置,那么回调结果将不返回给启动它的Activity,而是返回更上一级
例如三个Activity A、B、C , A startActivityForResult启动B,B启动C,B启动C时设置 Intent.FLAG_ACTIVITY_FORWARD_RESULT ,C setResult后结果将会返回给A而不是B
5、Intent.FLAG_ACTIVITY_NEW_TASK(与taskAffinity配合使用)
如果设置,这个Activity将会处在一个新的任务栈中。如果正在启动的Activity的Task已经在运行的话,那么Activity不会产生新的实例,而是当前Task会简单的移入前台。
例如三个Activity A、B、C , A启动B,B启动C,两次启动均携带Intent.FLAG_ACTIVITY_NEW_TASK标志位 A、B、C taskAffinity均不同.
此时会有三个任务栈,A、B、C分别处于不同的任务栈,C 再启动B并携带Intent.FLAG_ACTIVITY_NEW_TASK,
此时B不会重新实例化,B的任务栈会被直接置于前台.
假设B再启动一次C但是不携带Intent.FLAG_ACTIVITY_NEW_TASK,此时B所在的任务栈会有一个新的C实例,此处称之为D,
如果在D中再次启动B并携带Intent.FLAG_ACTIVITY_NEW_TASK标志位,我们会发现没有任何变化,
因为当前D和B处于同一个任务栈,再次通过携带Intent.FLAG_ACTIVITY_NEW_TASK标志位启动B时,当前所请求的任务栈中B已经存在,
B所在的任务栈会直接被置于前台,而此时D刚好处于该任务栈栈顶,所以看不到任何变化
6、Intent.FLAG_ACTIVITY_NO_HISTORY
如果设置,新的Activity将不再历史stack中保留。用户一离开它,这个Activity就关闭了。
例如两个Activity A、B。A启动B并携带Intent.FLAG_ACTIVITY_NO_HISTORY,按Home键回到桌面,再通过任务表回到应用,此时显示的是A
7、Intent.FLAG_ACTIVITY_NO_USER_ACTION
主要影响onUserLeaveHint(),新的Activity启动后要置于前台之前,当前的正在运行的Activity被置于后台,作为用户行为,当前的正在运行的Activity会触发回调onUserLeaveHint
如果启动新Activity携带Intent.FLAG_ACTIVITY_NO_USER_ACTION标志位,那么会阻止当前的正在运行的Activity触发回调onUserLeaveHint
8、Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
携带该标志启动Activity,被启动的Activity将被移动到栈顶
例如四个Activity A、B、C、D。A启动B,B启动C、C启动D。此时任务栈为ABCD。
如果D再启动A并携带Intent.FLAG_ACTIVITY_REORDER_TO_FRONT,A将被置于栈顶此时任务栈为BCDA。
启动一个TargetActivity,设置标记Intent.FLAG_ACTIVITY_CLEAR_TOP,与TargetActivity属于同一个任务栈并且处于TargetActivity之上的Activity将会出栈,当前启动的TargetActivity将处于目标栈栈顶,如果没有设置Intent.FLAG_ACTIVITY_SINGLE_TOP,那么在目标栈中的旧的TargetActivity(如果存在的话)将会被关闭并生成一个新实例代替,如果设置了Intent.FLAG_ACTIVITY_SINGLE_TOP,TargetActivity就不会重新实例化,会调用onNewIntent()
2、Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET(API21被Intent.FLAG_ACTIVITY_NEW_DOCUMENT替代 )
A启动B,Intent设置Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET, 当A所在的任务栈重新回到前台时,B以及B之上的Activity将离开这个任务栈。例如启动B之后按Home键回到桌面,如果点应用图标启动这个应用,将显示A,无法再回到B。
如果查看菜单,会显示两个任务栈,选择B所在的任务栈,一直返回最后会回到桌面,无法再回到A所在的任务栈。
也就是说,下一次Task带着 FLAG_ACTIVITY_RESET_TASK_IF_NEEDED标记进入前台时,需要清理Activity。
3、Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
新启动的Activity不添加到最近应用列表,我们从最近应用里面查看不到我们启动的这个Activity
例如A启动B B放在新的任务栈中 如果设置Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 那么最近应用列表将看不到B所在的任务
如果设置,那么回调结果将不返回给启动它的Activity,而是返回更上一级
例如三个Activity A、B、C , A startActivityForResult启动B,B启动C,B启动C时设置 Intent.FLAG_ACTIVITY_FORWARD_RESULT ,C setResult后结果将会返回给A而不是B
5、Intent.FLAG_ACTIVITY_NEW_TASK(与taskAffinity配合使用)
如果设置,这个Activity将会处在一个新的任务栈中。如果正在启动的Activity的Task已经在运行的话,那么Activity不会产生新的实例,而是当前Task会简单的移入前台。
例如三个Activity A、B、C , A启动B,B启动C,两次启动均携带Intent.FLAG_ACTIVITY_NEW_TASK标志位 A、B、C taskAffinity均不同.
此时会有三个任务栈,A、B、C分别处于不同的任务栈,C 再启动B并携带Intent.FLAG_ACTIVITY_NEW_TASK,
此时B不会重新实例化,B的任务栈会被直接置于前台.
假设B再启动一次C但是不携带Intent.FLAG_ACTIVITY_NEW_TASK,此时B所在的任务栈会有一个新的C实例,此处称之为D,
如果在D中再次启动B并携带Intent.FLAG_ACTIVITY_NEW_TASK标志位,我们会发现没有任何变化,
因为当前D和B处于同一个任务栈,再次通过携带Intent.FLAG_ACTIVITY_NEW_TASK标志位启动B时,当前所请求的任务栈中B已经存在,
B所在的任务栈会直接被置于前台,而此时D刚好处于该任务栈栈顶,所以看不到任何变化
6、Intent.FLAG_ACTIVITY_NO_HISTORY
如果设置,新的Activity将不再历史stack中保留。用户一离开它,这个Activity就关闭了。
例如两个Activity A、B。A启动B并携带Intent.FLAG_ACTIVITY_NO_HISTORY,按Home键回到桌面,再通过任务表回到应用,此时显示的是A
7、Intent.FLAG_ACTIVITY_NO_USER_ACTION
主要影响onUserLeaveHint(),新的Activity启动后要置于前台之前,当前的正在运行的Activity被置于后台,作为用户行为,当前的正在运行的Activity会触发回调onUserLeaveHint
如果启动新Activity携带Intent.FLAG_ACTIVITY_NO_USER_ACTION标志位,那么会阻止当前的正在运行的Activity触发回调onUserLeaveHint
8、Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
携带该标志启动Activity,被启动的Activity将被移动到栈顶
例如四个Activity A、B、C、D。A启动B,B启动C、C启动D。此时任务栈为ABCD。
如果D再启动A并携带Intent.FLAG_ACTIVITY_REORDER_TO_FRONT,A将被置于栈顶此时任务栈为BCDA。