android activity启动模式

activity启动模式在特定的业务场景下会使用到,而且面试的时候也喜欢问,废话不多说,用例子去实现下,新建一个android项目laucherActivity,新建几个类,如果:

android activity启动模式_第1张图片

activity_main.xml



    

android activity启动模式_第2张图片

为了其效果明显,我们把开启的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);
	}
}

一个简单的类在每个activity中都添加 ActivityUtil.getInstance().add(this);这句代码即可,现在每个activity节点android:launchMode没有任何配置,就是默认的启动模式,默认启动的模式是standard

主界面图:

android activity启动模式_第3张图片

现在点击5次启动自己的button,然后再点击activity个数:

android activity启动模式_第4张图片

可以看到如果activity的启动模式为standard时,启动activity,就会创建新的activity,这样如果启动过多的话,是比较占内存的,所以为什么做项目中,如果把一些不需要的界面finish(),

当我们在MainActivity中启动A_Activity 再在A_Activity中启动MainActivity再启动自己结果应该是这样的

MainActivity---->A_Activity_MainActivity_MainActivity

先跟大家说下所有的activity都是存在一个叫任务栈中,我们知道栈的结构是先进后出,如图:

android activity启动模式_第5张图片

这图没做好,请见谅,现在把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,这就解析了为什么点击三次后退键退出应用了,




你可能感兴趣的:(android)