Actvity的四种Launchmode

来源:互联网 发布:西南交大网络教育 编辑:程序博客网 时间:2024/06/10 03:12


我们今天讲的是Activity的四种Launchmode.

launchmode在Activity跳转中扮演者多个角色,它可以决定是否生成新的Activity实例,是否重用以

存在的Activity实例,是否和其他的Activity共用一个task里,这里简单的介绍下task,task是一个具有

栈结构的对象,一个task能有多个Activity,启动一个工程,也就创建了与之对应的task。


Activity有四种Launchmode:

1.standard.

2.singleTop.

3.singleTask.

4.singleInstance

  下面我们来介绍这四种Launchmode.

1.standard

standard是Activity默认的启动模式,不用为Activity配置Launchmode="standard",当然也可以指定

standard。下面我们可以用图片来说明下:

由图结构我们可以看出,FirstActivity是处于所有Activity中的栈顶的,因为我们在<Activity>配置中

设置了Launchmode="standard"默认的跳转方式,所以FirstActivity跳转到FirstActivity都会生成新的实例。

故此Launchmode=“standard”和默认情况下,Activity跳转到Activity都会生成新的实例。

2.singleTop

从上面提到Activity配置中设置Launchmode="singleTop",那么这个Activity系统会根据singleTop的

跳转方式来跳转。从下图中我们可以看出来:

从上图可以看出FirstActivity的Launchmode="singleTop",只要这个FirstActivity处于栈顶,

FirstActivity跳转到FirstActivity就不会在栈中创建新的FirstActivity实例。这就是在一个Activity

中的效果,那么在多个Activity中跳转时怎样的情况呢!通过下图我们可以看到,

从上图可以看出,刚开始程序一运行我们看到的是FirstActivity是处于栈顶的,我们从FirstActivity

跳转到SecondActivity,因为SecondActivity在栈中没有实例,我们就会创建一个实例。此时FirstActivity

就会停止掉,那么SecondActivity就会处于栈顶,由于此时FirstActivity不处于栈顶,所以FirstActivity的

配置Launchmode="singleTop"跳转方式说明,从SecondActivity跳转到FirstActivity就会创建一个新的实例

,这就SingleTop的跳转方式。


3.singletask

从配置文件中Launchmode="singleTask",那么我们会根据singleTask跳转方式来跳转。如图:

图中可以看出来,因为FirstActivity在配置中设置了launchmode="singleTask",那么程序一运行

就进入到FirstActivity中就在栈中创建了FirstActivity的实例,在从图中可以看出来,从FirstActivity

跳转到SecondActivity就会在栈中创建SecondActivity实例。因为FirstActivity的Launchmode="singletask"

,所以在从SecondeActivity跳转到FirstActivity中SecondActivity就会被迫出栈,所以在栈中就不会有

SecondActivity实例。再从FirstActivity跳转到SecondActivity中又会重新创建新的SecondActiviy实例。


4.singleInstance

在Activity配置中设置Launchmode="singleInstance",那么这个Activity就会执行singleInstance

跳转方式。如图所示:

从上图可以看出来,启动一个程序进入到FirstActivity就会创建一个栈,如果再从FirstActivty

跳转到SecondActivity中,由于FirstActivity配置Launchmode="singleInstance",所以跳转到

SecondActivity中我们就会创建一个新的栈,如果我们按后退键回到原始栈中,这时候系统会在原始

栈中生成一个新的FirstActivity实例。然后再回退两次,然而并没有退出,而是回到SecondActivity

中,为什么呢?是因为从SecondActivity跳转到FirstActivity中,我们的起点变成了SecondActvity

所在的栈中,这样一来,我们需要“回归”到这个栈中。

 如果我们修改FirstActivity的Launchmode的值为standard、singleTop、singleTask、singleInstance时

我们就会执行

跳转
















0 0
原创粉丝点击