Activity的启动模式

1.standard:标准模式、默认的情况下
      每次启动一个Activity都会重新创建一个新的实例,在这种模式下,谁启动了这个Activity,那么这个Activity就运行在启动它的那个Activity所在的栈中。
      用ApplicationContext去启动standard模式的Activity会报错,这是因为standard模式的Activity默认会进入启动它的Activity所属的栈中,但是非Activity的context并没有所谓的任务栈。
      解决这个问题的方法是:
      设置FLAG_ACTIVITY_NEW_TASK标记位,这样启动的时候就会为它创建一个新的任务栈,待启动的Activity实际上是以singTask模式启动的。
2.singleTop:栈顶复用模式:
      如果新Activity已经位于任务栈的栈顶,那么此Activity不会被创建。同时它的onNewIntent方法会被回调,通过此方法的参数我们可以取出当前请求的信息。(不会调用onCreate,onStart)
      如果新Activity的实例已存在不是位于栈顶,那么新Activity仍然会重新创建。
3.singleTask:栈内复用模式:
      一个singleTask模式的Activity请求启动的时候,系统首先判断该Activity所需的栈A是否存在,如果不存在,首先创建所需的栈A,然后创建Activity,将Activity的实例放进这个栈中
      如果这个栈A存在,然后判断栈内是否有Activity的实例,如果没有就创建Activity,然后将Activity的实例放进这个栈中
      如果这个栈A存在,且栈内存在这个activity的实例,那么就会把Activity调到栈顶,并调用它的onNewIntent方法。
4.singleInstance:单实例模式:
      这是一种加强的singleTask,它除了singleTask的特性外,还加强了一点,具有此种模式的Activity,只能单独地位于一个栈中

你可能感兴趣的:(Activity的启动模式)