Android开发中Flag参数的讲解:
Intent对象在Android开发中起着举足轻重的作用,其内置了丰富的常量,用于传递数据,
下面本文将介绍跟Task有关的一些Flag参数,各参数的理解均来自Android API和本人在实际项目中的体验,如果有描述不当之处,还请各位不吝赐教。
1.FLAG_ACTIVITY_BROUGHT_TO_FRONT:不在程序代码中设置,在launchMode中设置singleTask模式时系统帮你设定。
2.FLAG_ACTIVITY_CLEAR_TOP:清理要启动的Activity之上的所有的Activity。该Activity位于栈顶。
例如,一个Activity Stack中有Activity:A,B,C,D。如果D调用了startActivity()启动了B,那么,C和D都将结束。
3.FLAG_ACTIVITY_NEW_TASK:将使Activity成为一个新Task的开始。
下面详细讲解一下FLAG_ACTIVITY_NEW_TASK这个Flag。设置此状态原则如下:
(1).同一个应用程序中的Activity的亲和性taskAffinity是一样的。也就是说Activity是在同一个栈中的。
(2).设置该FLAG的时候,首先会查找是否存在和被启动的Activity具有相同的亲和性的任务栈。
如果有,则直接把这个栈整体移动到前台,并保持栈中的状态不变,即栈中的Activity的顺序不变。
如果没有,则新建一个栈来存放被启动的Activity。
例如:
A.前提: Activity A和Activity B在同一个应用中.
操作: Activity A启动开僻Task堆栈(堆栈状态: A), 在Activity A中启动Activity B, 启动Activity B的Intent的Flag设为
FLAG_ACTIVITY_NEW_TASK, 则Activity B被压入Activity A所在堆栈(堆栈状态: A-B).
原因:默认情况下同一个应用中的所有Activity拥有相同的亲和性(taskAffinity).即在同一个栈中。
B.前提: Activity A在名称为”TaskOne应用”的应用中, Activity C和Activity D在名称为”TaskTwo应用”的应用中.
操作1: 在Launcher中单击”TaskOne应用”图标, Activity A启动开僻Task堆栈, 命名为TaskA(TaskA堆栈状态: A),
在Activity A中启动Activity C, 启动Activity C的Intent的Flag设为FLAG_ACTIVITY_NEW_TASK,Android系统会为Activity C开僻一个新的Task, 命名为TaskB(TaskB堆栈状态: C), 长按Home键, 选择TaskA,Activity A回到前台, 再次启动Activity C(两种情况1.从桌面启动;2.从Activity A启动,两种情况一样), 这时TaskB回到前台, Activity C显示, 供用户使用, 即:包含FLAG_ACTIVITY_NEW_TASK的Intent启动Activity的Task正在运行, 则不会为该Activity创建新的Task,而是将原有的Task返回到前台显示。
4.FLAG_ACTIVITY_SINGLE_TOP:如果Activity位于Activity Stack的顶端,则不再创建一个新的实例。否则就会创建一个新的实例。等同于Activity的启动模式launch mode为singleTop模式。
5.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:如果设置,新的Activity不会在最近启动的Activity的列表中保存。