Android 启动模式

1.standard:标准模式,也是默认模式。每当我们启动一个Activity,系统就会相应的创建一个实例,不管这个实例是否已经存在。

2.singleTop:栈顶复用模式,如果要启动的Activity处于栈的顶部,那么此时系统不会创建新的实例,而是直接打开此页面,同时它的onNewIntent()方法会被执行,可以通过Intent进行传值,而且它的onCreate(),onStart()方法不会被调用,因为它并没有发生任何变化。

3.singleTask:栈内复用模式,如果栈中存在这个Activity的实例就会复用这个Activity,不管它是否位于栈顶,复用时,会将它上面的Activity全部出栈,因为singleTask本身自带clearTop这种功能。并且会回调该实例的onNewIntent()方法。

4.singleInstance:单实例模式,该模式具备singleTask模式的所有特性外,与它的区别就是,这种模式下的Activity会单独占用一个Task栈,具有全局唯一性。以singleInstance模式启动的Activity在整个系统中是单例的,如果在启动这样的Activiyt时,已经存在了一个实例,那么会把它所在的任务调度到前台,重用这个实例。

启动模式的特点:

1.standard特点:(1) Activity默认的启动模式。(2) 新Activity在启动它的Activity所在的栈中。

2.singleTop特点:若需新建的Activity位于任务栈栈顶,那么此Activity的实例就不会重建,而是重用栈顶的实例,否则就创建该Activity新的实例并置于栈顶。

3.singleTask特点:(1)查看Activity想要的任务栈是否存在,若不存在则重建一个任务栈,创建该Activity实例并置于栈中。(2)若任务栈存在,则查看Activity是否存在栈中,若存在栈中,则将该Activity以上的所有Activity出栈,使该Activity处于栈顶。

4.singleInstance特点:直接创建一个新的任务栈,并创建该Activity实例放于新的任务栈中

特例:
如果存在activityA,B(启动模式singleTask/singleInstance),C(stabdard)
调起过程为A-->B-->C-->B-->C...后面循环
A启动B时调用了finish,
或者A没有调用finish,A和C设置了不同的taskAffinity,就是不在同一个栈
结果:C只创建一次实例

A没有调用finish,而且和C在同一个栈
结果二:如果A没有调用finish,则C每次启动都会创建新实例

总结:ActivityA的启动模式为standard时,如果ActivityA所在的栈只有ActivityA一个实例,那么其他栈的Activity调起ActivityA,ActivityA只会创建一次实例,就是只走一次onCreate,第二次调用会走onRestart,如果ActivityA所在栈存在其他Activity实例,则ActivityA每次启动都会创建新的实例

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