开始学习android的时候就对这个有些难以理解,其实知识点也就那么几点。
首先Android 有4种启动模式
分别为:standard,singleTask,singleTop,singleInstance。
standard模式 :如果在xml中不加任何配置的话,默认是这种模式。
1. 什么是standard模式?
第一种情况:比如你现在你从A(Activity) startActivity 跳转到B(Activity),那么B(Activity)会重新走OnCreate,onStart(),onReume方法。
第二种情况:比如你现在是在A(Activity),startActviity 跳转到A(Activity)
那么A(Activity)也会重新走OnCreate,onStart(),onReume方法。
如果现在你按back键,需要2次才会退出A(Activity)。
其实说了这么多 可以简单的理解为只要是standard模式,startActviity之后 就相当于重新new Activity 然后添加到容器顶部(stack)。
在栈中的情况如下:
image.png
2. 什么是SingleTop模式?
SingleTop和standard很像。唯一和standard不同的是 如果当前Activity位于栈顶那么 该Activity不会被重新创建 会回调 onNewIntent 方法。
image.png3. 什么是SingleTask模式?
栈内复用模式,这是一种单例模式。
如果当前压ABCD,start D , 栈内情况还是ABCD
如果当前压ABCDE,start D , 栈内情况是ABCED
第1种情况 AB -> A = BA :
image.png
第2种情况 AB - > B = AB:
image.png
image.png
第3种情况 :
ABC 为同一个任务栈 : AB ->C = ABC
ABC 为不同任务栈 : AB ->C = AB(stack_S1), C (stack_S2)
可以给C 配置(TaskAffinity+singleTask)属性那么C就是单独的任务栈,
注意TaskAffinity 不能 配置为你的包名,不然就木有意义了。因为默认stack配置就是包名。
image.png
4. 什么是SingleInstance模式?
单实例模式。
加强版的singleTask模式。所有singleTask功能外,唯一区别就是只能独享一个任务栈。而singleTask 只要多个Acivity都配置相同的TaskAffinity,那么他们都在同一个任务栈中。并只有一个实例。
关于多任务栈有一个(弹栈)场景:
2个栈的情况
S1栈 = A(栈底) B
S2栈 = E(栈底) F
第一种情况:
AB -> 启动F后。
按back键,依次弹出 F E, BA
第二种情况:
AB -> 启动E后。
按back键,依次弹出 E , BA
总结4个模式之间也很有意思。
standard + X = singleTop
SingleTop + Y = singleTask
singleTask + Z = singleInstance
X:只要当前启动Activity在栈顶 我就不创建。
Y:不管当前的Activity在不在栈顶 我都不创建(除非当前栈中没有启动的Activitiy)。
Z:只要启动 Activity我就创建一个独享的任务栈(只能有一个activity实列)。
网友评论