使用FLAG_ACTIVITY_SINGLE_TOP|FLAG_ACTIVITY_NEW_TASK的栈行为疑问
Android Activity栈行为解析:FLAG_ACTIVITY_SINGLE_TOP + FLAG_ACTIVITY_NEW_TASK 场景
先明确两个标记的核心作用:
FLAG_ACTIVITY_SINGLE_TOP:若目标Activity已在当前栈顶,则复用现有实例;若不在栈顶,需结合其他标记判断是否创建新实例。FLAG_ACTIVITY_NEW_TASK:仅当目标Activity的taskAffinity与当前栈的taskAffinity不同时,才会为其创建新任务栈;默认情况下所有Activity的taskAffinity均为应用包名,此时该标记不会创建新栈,而是将目标Activity移至栈顶,并清除其上方的所有Activity。
回到你的场景:当前Activity栈为 A → B → C,从C启动A并使用FLAG_ACTIVITY_SINGLE_TOP | FLAG_ACTIVITY_NEW_TASK标记:
- 默认
taskAffinity一致,不会创建新栈。 - 系统会将A上方的B、C从栈中移除,把A调到栈顶,最终栈结构变为 [A]。
- 此时在A界面按返回键会直接退出应用,因为栈中只有A这一个Activity;而不是从C返回——因为C已经被出栈了。
总结:不会创建新栈,原有栈的B、C会被清除,最终栈仅保留A,按返回键直接退出应用。
内容的提问来源于stack exchange,提问作者Gil Ong
相关产品推荐
相关产品推荐

