Android的activity的四种启动模式

要了解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弹出。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值