android 活动的启动模式
活动是有启动模式的,启动模式一共有四种,分别是standard、singleTop、singleTask和singleInstance
工具/原料
android环境搭建
一.standard
1、可以发现,我们新建一个android程序的时候,并没有指明活动的启动模式,但是仍然可以正常使用。是因为活动的默认启动模式就是standard,也就是说如果我们不指定活动的启动模式,那么活动就会以standard的模式进行启动。
2、如下图所示,当前我们有一个活动为A,那献垴淄睬么在A活动上又启动活动A,那么返回栈中会有2个活动A。所以,standard模式,就是每次启动一个活动的时候,该活动就位于栈顶,而不会管当前的栈中是否已经存在了该活动了。
3、举例说明,写一个简单的android应用,增加一个按钮,点击按钮会再次启动自身的activity.Button b = (Button) findViewById(R.id.button1); b.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent i = new Intent(MainActivity.this,MainActivity.class); startActivity(i); } });
4、可以看到,每次点击按钮,onCreate()方法都被调用一次。onCreate()方法都知道,是在活动第一次被创建的时候调用的,可以看到,多次点击按钮,活动多次被创建
二.singleTop
1、当活动已经位于栈顶了,那么就不会再次创建activity了。如下图所示,会判断要启动的activity是否已经是栈顶了,如果是,则不会启动,如果不是,才会启动。
2、代码如下,修改清单文件,增加如下代码:android:launchMode="singleTop"
3、可以看到,无论如何点击按钮,oncreate只被执行了一次,因为他已经位于栈顶了
4、现在,我们增加一个活动B,再主活动中点击按钮,用于启动这个活动B,然后在活动B中增加一个按钮,启动主活动
5、我们操作如下:1)启动该应用程序;2)点击启动activityB;3)在活动B中点击,启动主活动可以看到,主活动启动了2次。
三.singleTask
1、看名字就知道了,singleTop是“唯一的顶”,是判断当前activity是否位于栈顶的;而single皈其拄攥Task是“唯一的栈”,是判断当前activity是否位于栈的。所以,这种模式就是,一个栈中只有一个activity.
2、修改清单文件,将启动模式改为singleTaskandroid:launchMode="singleTask"
3、可以看到,无论我如何点击按钮启动主activity,主activity只在第一次启动的时候创建了一次
四.singleInstance
1、singleInstance是4大模式中比较难理解的一种模式了,要理解这个模式,首先要理解以下几个概念
2、1)我们系统中可以有多个任务,也就是说可以有多个返回栈。任务是一个Activity的集合,它使用栈的方式来管理其中的Activity,这个栈又被称为返回栈。
3、2)手机的HOME建是大多数任务开始的地方。当我们在主页启动一个活动,如果这个活动之前没有被启动过的话,就相当于是创建了一个新的任务,有了一个新的返回栈,然后将这个活动加入栈顶
4、3)如果用户一直按返回键,那么会把返回栈中的活动一个一个移除,当整个返回栈一个活动都没有的情况下,返回栈就空了,那么任务也就不存在了,你的手机也就回到首页了。
5、5)如果不按返回键,直接“HOME键”回到主页,那么任务是不会消失的,而是整个任务进入到了后台,处于后台的任务,其栈中所有的活动都处于停止状态,所有的数据,包括活动在栈中的顺序都原封不动的保留。
6、6)此时,如果再次启动另一个活动,那么又会创建一个新的任务B,此时我们就有了2个任务了,一个在前台,一个在后台。
7、7)此时,再次点击“HOME建”回到主页,那么2个任务全部进入到了后台。
8、8)如果这个时候,再次打开了任务A中的应用程序,那么任务A就从后台回到了前台。
9、OK,了解了这些,就可以学习singleInstance模式了。
10、如下图所示,当一个活动为singleInstance模式,那么这个活动将单独存在于一个独立栈中。比如说,当前启动了一个活动A,此时创建了一个新的任务,新的栈;在活动A上启动了活动B,按理说活动B也将位于这个任务,并且处于这哥栈的顶端;但是因为这个栈为singleInstance模式,此时启动会启动一个新的栈来单独保存这个活动