Android的activity的四种启动模式

来源:互联网 发布:sql中as的用法 编辑:程序博客网 时间:2024/05/21 17:40

要了解activity的启动模式,必须首先明白taskback Stack的概念

官方APITask定义如下:A task is a collection of activities that users interact with whenperforming a certain job.意思是当完成某种功能时,与用户交互的一组活动的集合。

Back Stack的定义如下:The activitiesare arranged in a stack (theback stack), inthe order in which each activity is opened.意思是打开的活动都被放入一个栈中(返回栈),次序就是每个活动被打开的先后次序。而且back stack中的activity顺序不得调整,遵循后进先出的原则,谁处于栈顶,谁先出栈。

TaskbackStack通常共同存在,每打开一个activity,就放入栈中,处于栈顶的activity就是在屏幕上可见的activity,即处于前台(foreground,位于栈中的其他activity就处于后天运行(background)。通俗地说,你在屏幕上能看到的那个activity一定是处于栈顶的,而要想弄明白你总共打开可多少acticity,那你可以不停按back键盘(就是模拟器上的那个三角按钮)。几次可以退出程序,就是创建了几个activity.

弄明白了上述问题,我们再介绍activity的启动模式(launchemode),一共有四种启动模式,即standardsingleTopsingleTasksingleInstance.这些模式可以在AndroidManifest.xml中配置。

<activity

android:name=".SecondActivity"

android:label="@string/title_activity_second"

android:launchMode="standard">

</activity>

1standard:

默认启动方式。每打开一个activity,都会创建一个此activity的实例,一个activity可以被实例化多次,每个实例可以分属于不同的任务,一个任务可以有多个实例。

如果选择了此种模式,无论什么时候,启动一个activity都会重新创建一个实例,放入back stack中,不管back stack中是否有此实例。

此图中启动顺序是:first activity启动second activity , second activity启动third activity ,third activity再启动first activity,这时尽管back stack中已经有一个first activity,但是当third activity再启动first activity时,依然创建可新实例,而且与处于栈底的那个first activity实例无关。

这时通过点击四次back键,才能退出程序,因为back stack中有四个activity

2SingleTop

如果某个activity设置的启动模式是singleTop,当启动此activity时,如果此activity已经在栈顶,则不创建此activity的实例,否则就创建实例,保证此activity处于栈顶(on the top of the back stack).

设置Activity CSingleTopA启动BB启动CC启动C,由于C已经处于栈顶,所以当C启动C时,不会创建新实例,按返回键也是三次退出程序

设置BsingleTopA启动BB启动CC启动B,由于B不在栈顶,所以依然会创建B的一个实例并置于栈顶,按back键,四次退出程序

(3)singleTask

当设置某个activity启动模式为singleTask时,启动此activity,如果此activityback stack中不存在,则创建此activity的实例;如果此activity已经处于栈顶,则不创建新的实例,也将其他的activity弹出back stack;如果此activity不处于栈顶,但是已经存在于back stack中,则将位于其上的activity全部弹出栈,保证此activity处于栈顶。

设置DsingleTask,启动D时,由于D已经已经处于栈顶,则不创建新的实例,也不会将其他的ABC弹出back stack

设置BsingleTaskA启动BB启动CC启动DD启动B,第一次由于Back Stack中没有B,所以会创建,第二次启动B,由于B不处于栈顶,但是已经存在于back stack中,则将位于其上的CD全部弹出栈,保证此B处于栈顶。

(4)SingleInstance

设置某个Activity启动模式为singleInstance。则启动该activity时,它会创建一个新栈,并且新栈中有且仅有它一个。出栈时,先将前台栈中的Activity弹出,再将此栈中的此activity弹出。

2 0
原创粉丝点击