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每次启动都会创建新的实例

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容