Activity intent中经常使用的FLAG_ACTIVITY_CLEAR_TOP,它的作用相当于加载模式中的SingleTask。使用这个标记启动一个Activity时,它会将要启动的Activity之上的所有Activity都弹出栈空间。举个例子,假设当前栈中的情况是A、B、C、D,这个时候从D中跳转到B,使用FLAG_ACTIVITY_CLEAR_TOP标记启动,那么栈中的情况就会变成A、B。
另外一个常用的标记是FLAG_ACTIVITY_REORDER_TO_FRONT,它的效果和FLAG_ACTIVITY_CLEAR_TOP类似。当在A、B、C、D这样的正常启动情况下,如果在D中再次启动B,不管B有没有使用FLAG_ACTIVITY_REORDER_TO_FRONT启动,结果都会变成A、C、D、B。这个标记的作用是将要启动的Activity移到栈顶。
有一个标记需要特别注意,那就是FLAG_ACTIVITY_BROUGHT_TO_FRONT。网上很多人对它的描述是误导性的。实际上,它的作用是将要启动的Activity拿到任务栈的最顶端,而不会启动新的Activity。举个例子来说,我现在有一个A,我在A中启动B,并在A的Intent中添加了FLAG_ACTIVITY_BROUGHT_TO_FRONT标记。这样启动的B会在任务栈中位于最顶端。假设在B中再次启动C、D(正常启动)。如果此时在D中再启动B,那么最后的栈情况会是A、C、D、B。
另外一个常用的标记是FLAG_ACTIVITY_NO_HISTORY,顾名思义,用这个标记启动的Activity一旦退出,就不会存在于栈中。举个例子来说,假设当前栈中的情况是A、B、C。在C中使用FLAG_ACTIVITY_NO_HISTORY标记启动D,然后D再启动E,这个时候栈中的情况就变成了A、B、C、E。
综上所述,不同的FLAG标记在Activity intent中的使用,能够灵活控制Activity的启动方式和任务栈的行为。不过大家在使用的时候要注意理解每个标记的具体含义,避免产生误解。希望以上解释能够帮助大家更好地理解和应用FLAG_ACTIVITY_CLEAR_TOP以及其他相关标记。