Android系统中是通过Activity栈的方式来管理Activity的,当我们启动一个应用时,系统就会为之创建一个Task栈,用来管理多个Activity。先启动的Activity会放在栈的底部,新启动的Activity在栈的顶部,也就是先进后出。加载模式就是要负责Activity与Task栈之间的加载关系。
1. 有哪些加载模式
- standard: 标准模式
- singleTop: 栈顶单例模式
- singleTask:栈内单例模式
- singleInstance:全局单例模式
2. 详细介绍
2.1 standard 标准模式
采用这种模式,每次启动Activity时,系统总会为目标Activity创建一个新的实例,并将该实例添加到原有的Task栈中。例如,此时栈顶为Activity_A,此时若又要创建Activity_A,那么系统将创建新的Activity_A实例,将其加入到原有Task栈的Activity_A上方。
2.2 singleTop 栈顶单例模式
顾名思义,采用这种模式时,只允许栈顶有一个目标Activity实例。例如,此时栈顶为Activity_A,此时若又要创建Activity_A,那么系统将直接复用已有的实例,而不再创建新的。
2.3 singleTask 栈内单例模式
望文生义,没错该模式只允许栈内只有一个目标Activity,并将其至于栈顶。例如,意图创建Activity_A,而此时栈内情况分为两种,第一种是栈内没有Activity_A的实例,第二种就是有一个。如果没有,那就好说了,创建一个Activity_A并将其至于栈顶。如果栈内有,又分为两种,第一种是Activity_A就在栈顶,那么此时与singleTop相同,系统将直接复用栈顶已有的实例,而不再创建新的;如果不在栈顶,那么系统将Activity_A之上的所有Activity移除栈,从而使其转至栈顶。
2.4 singleInstance 全局单例模式
全局单例,就是无论从哪个Task中启动目标Activity,系统只会创建一个Activity实例,并且该Activity独占一个Task栈。例如,意图创建一个全局单例模式的Activity_A,此时分为两种情况。第一,目标Activity不存在,此时系统创建一个全新的Task栈,然后再创建Activity_A实例,并将其加入到栈内;第二,Activity_A已经存在,此时无论它处于哪个应用,也无论它位于哪个Task,系统都会将Activity_A所在的Task栈转至前台,使其可见。
网友评论