Activity之launchMode

launchMode

有四种(standard, singleTop, singleTask, singleInstance), 默认standard.

standard

Activity 可以多次实例化,而每个实例均可属于不同的任务,并且一个任务可以拥有多个实例。

singleTop

如果当前任务的顶部已存在 Activity 的一个实例,则系统会通过调用该实例的 onNewIntent() 方法向其传送 Intent,而不是创建 Activity 的新实例.

Activity 可以多次实例化,而每个实例均可属于不同的任务,并且一个任务可以拥有多个实例.

singleTask

系统创建新任务并实例化位于新任务底部的 Activity. 但是,如果该 Activity 的一个实例已存在于一个单独的任务中,则系统会通过调用现有实例的 onNewIntent() 方法向其传送 Intent,而不是创建新实例.

一次只能存在 Activity 的一个实例.

singleInstance

与 "singleTask" 相同,只是系统不会将任何其他 Activity 启动到包含实例的任务中.

该 Activity 始终是其任务唯一仅有的成员;由此 Activity 启动的任何 Activity 均在单独的任务中打开.

standard模式的Activity, 每次启动都会创建一个新的实例, 放到启动他的那个Activity所在的Task中.

singleTop模式的Activity, 仅当该Activity已经在Task的顶部了, 才会复用. 复用时onPause, 然后onNewIntent唤起, 走onResume流程. 否则都要创建新的实例, 放进Task中.

singleTask模式的Activity, 同一个Task中只会存在一个实例. 如果Task中还没有, 则新建, 放在Task顶部; 如果Task中已经有该Activity实例, 则复用.

singleTask模式的Activity的复用模式:

如果已经在Task顶部, 如同singleTop的复用模式;

如果不在Task顶部, 则销毁Task中该Activity顶部的所有其他Activity, 通过onNewIntent唤起该Activity, 走onRestart流程.

singleInstance模式的Activity, 会运行在一个单独的Task中, 且整个系统中只有一个该Activity实例. 相当于单例模式. 复用模式和singleTask一样.

你可能感兴趣的:(Activity之launchMode)