Activity四种启动模式
Task
Activity是Android应用程序的基础组件之一,在应用程序运行时,每一个Activity代表一个用户操作。用户为了完成某个功能而执行的一系列操作就形成了一个Activity序列, 这个序列在Android应用程序中就称之为任务(Task),它是从用户体验的角度出发,把一组相关的Activity组织在一起而抽象出来的概念。
standard
默认启动模式,可创建多个实例,也允许多个Activity相互叠加。
singleTop
可以有多个实例,但是不允许多个相同Activity叠加。若不在栈顶,则新建实例;若实例在栈顶,则重用该实例。
singleTask
只能存在一个实例。相当于Task内单例模式。若不存在则创建实例;若栈中已存在该实例,则重用该实例。重用时,该实例会回到栈顶,并将它上面的其他实例移除栈,并进入onNewIntent方法中。
比如1和3启动模式是standard,2是启动模式是singleTask,启动顺序是133111211333213312,返回是133111,只保留了最开头几个栈。2之间的栈都被移除了。
singleInstance
只存在一个实例,独立运行于一个task中。相当于全局单例模式。
比如1,3,4的启动模式是standard,2启动模式为singleInstance,启动顺序是4312434324,退出顺序为434342。
而且,我发现一个很有意思的事。如果如果按照43124的启动顺序,在启动第二个4时,实际启动的activity却是1,也就是2之前的那个。我猜想,可能跟task最开始的默认的启动类有关。
一旦在2之后启动最开始的默认启动类(也就是这里的4),结果并不是创建一个新的4,而是重用了在2之前的那个类。
明明4是standard,仅仅因为是默认的启动类,竟然被重用了。这实在太不合理了!!!到底是为什么???
经过一番思索,我想,或许,是因为我忘记考虑了一个问题:134都在同一个task中,而2在另一个task中。
这说明,不同task之间的启动顺序,可能并不像想象的那样。
然而智商有限,使得这个问题蒙上了一层神秘的面纱,sorry。
欢迎有想法的童鞋指教。