Activity有四种启动模式:standard ,singleTop,singleTask,singleInstance。
1,standard:是系统默认的启动模式,每次启动都会创建一个新的Activity实例。这个Activity的实例可以在同一个栈中也可以在不同的栈中,谁启动了这个Activity,这个Activity就属于启动它的那个Activity所在的栈。
2,singleTop:新的Activity如果已经位于栈顶,那么此Activity不会被重新创建,它的onNewIntent方法会被调用。如果新的activity存在但不在栈顶那么此Activity会被重建。
验证:Activity在栈顶时
MainActivity 启动 BActivity 此时BActivity 位于栈顶 BActivity 再启动自身
当BActivity 位于栈顶时,会走onNewIntent,不会创建新的实例。
Activity不在栈顶时
MainActivity启动AActivity, AActivity 启动BActivity 之后 BActivity再启动AActivity
此时AActivity已经在栈中且不位于栈顶
AActivity会创建新的实例
3,singleTask:如果Activity的实例已经存在于此栈中,那么多次启动都不会创建新的Activity实例而是会调用Activity的onNewIntent方法,此种模式下Activity是以单例的形式存在的。
验证:和singleTop 同样的操作再来一遍
MainActivity启动AActivity, AActivity 启动BActivity 之后 BActivity再启动AActivity
此时AActivity已经在栈中且不位于栈顶
启动AActivity时不会创建新的Activity而是走onNewIntent方法。
4,singleInstance:一个Activity单独的位于一个Activity栈中。Activity一旦被创建就会独自在一个新的任务栈中,再次启动此Activity除非所在任务栈被销毁否则只会走onNewIntent不会创建新的Activity实例。
另外onNewIntent在onstart之前执行。
网友评论