上一节讲生命周期,这一节讲"Activity 是怎么被放进栈里的"。启动模式是 Android 框架层里最容易出玄学 bug的一块——因为它的行为由"系统、任务栈、launchMode、Intent flags 四者共同决定",只讲launchMode的四个枚举值,等于只讲了四分之一。标题说"你要答账",指的就是把这四层都算进去。
先把结论放在前面:launchMode有standard(默认)、singleTop、singleTask、singleInstance(已废弃,不该再用)。但真正决定行为的是"任务栈怎么组织",所以真正要掌握的是四种任务栈(standard、singleTop、singleTask、singleInstance)与Intent flags(FLAG_ACTIVITY_NEW_TASK、CLEAR_TOP、REORDER_TO_FRONT、SINGLE_TOP等)。判据一句话:launchMode是"类级别的默认策略",Intent flags 是"这次调用的具体意图",后者优先级更高。