activity启动模式在特定的业务场景下会使用到,而且面试的时候也喜欢问,废话不多说,用例子去实现下,新建一个android项目laucherActivity,新建几个类,如果:
activity_main.xml
为了其效果明显,我们把开启的Activity加入到集合中,方便我们判断,
public class ActivityUtil {
private static final ActivityUtil instance = new ActivityUtil();
public List activies = new ArrayList();
private ActivityUtil(){};
public static ActivityUtil getInstance(){
return instance;
}
public void add(Activity act){
activies.add(act);
}
}
主界面图:
现在点击5次启动自己的button,然后再点击activity个数:
可以看到如果activity的启动模式为standard时,启动activity,就会创建新的activity,这样如果启动过多的话,是比较占内存的,所以为什么做项目中,如果把一些不需要的界面finish(),
当我们在MainActivity中启动A_Activity 再在A_Activity中启动MainActivity再启动自己结果应该是这样的
MainActivity---->A_Activity_MainActivity_MainActivity
先跟大家说下所有的activity都是存在一个叫任务栈中,我们知道栈的结构是先进后出,如图:
这图没做好,请见谅,现在把MainActivity的启动模式配置为singleTop,现在看集合中有多少个activity
只要MainActivity在任务栈的栈顶时,再点击启动MainActivity时,并不会启动MainActivity,点击启动其他Activity都行所有singleTop启动模式就清楚了,
singleTop:当要启动的Activity在栈顶时,这个时候就不会启动此Activity,
下面看看另一个启动模式singleTask
现在是这样的,在MainActivity中启动A然后A启动B然后B启动MainActivity,算起来是启动了4个Activity,过程:
Main_A_B_Main,但是我只要点击返回键 就退出应用了,说明当要启动的Activity在栈中,会把他前面的activity都杀死,那就是为什么在B中点击启动MainActivity点击返回键就退出了应用
还有最后一种模式就是singleInstance,我们也模仿上面的行为,发现当我们点击后退键的时候,要点击三次才退出应用,说明有三个activity存在,但是我明明启动的是四个activity啊,由此发现其实在B界面中启动Main..界面时,由于MainActivity启动模式设置为了singleInstance,它会新开一个任务栈,和之前的任务栈不一样,因此之前的任务栈是保留3个activity,这就解析了为什么点击三次后退键退出应用了,