Activity 的 LanuchMode

在默认情况下当我们多次启动同一个 Activity 的时候,系统会创建多个实例并把它们一一放入任务栈中,当我们每次执行back的时候会发现这些 Activity 会一一销毁,直到栈空为止当栈没有任何 Activity 的时候, 系统会回收这个任务栈,任务栈是一种 “后进先出” 的栈结构,Android 在设计的时候给它提供了启动模式来修改系统的默认行为,目前有四种启动模式:standard、singleTop、singleTask、singleInstance

  1. standard:标准模式。这也是系统的默认模式。每次启动一个 Activity 都会重新创建一个新的实例,不管这个实例是否已经存在。被创建的实例的生命周期符合典型情况下的 Activity 的生命周期。
  2. singleTop:栈顶复用模式。在此模式下,如果新的 Activity 已经位于任务栈的栈顶,那么此 Activity 就不会被重新创建,同时它的 onNewIntent 方法会被调用,通过此方法的参数我们可以取出当前请求的信息。需注意的是这个 Activity 的 onCreate、onStart 不会被系统调用。
  3. singleTask:栈内复用模式。这是一种单实例模式,在这种模式下,只要 Activity 在一个栈中存在,那么多次启动此 Activity 都不会重新创建实例,和 singleTop 一样,系统也会回调 onNewIntent。
  4. singleInstance:单实例模式。这是一种加强的 singleTask 模式,它除了具有 singleTask 模式的所有特征外,还加强了一点,那就是具有此种模式的 Activity 只能单独地位于一个任务栈中, 换句话说, 比如 Activity A 是 singleInstance 模式,当 A 启动后,系统会为它创建一个新的任务栈,然后 A 独自在这个新的任务栈中,由于栈内复用的特性,后续的请求均不会创建新的 Activity, 除非这个独特的任务栈被系统销毁了。