集团站切换校区

验证码已发送,请查收短信

复制成功
微信号:togogoi
添加微信好友, 详细了解课程
已复制成功,如果自动跳转微信失败,请前往微信添加好友
打开微信
图标

考试资讯

当前位置:pg电子试玩-pg电子平台网站 > > > >

android中的任务栈和activity的启动模式-pg电子试玩

发布时间: 2022-05-09 11:45:28

android中的任务栈和activity的启动模式

一、android中的任务栈

在android系统中,任务栈是一种用来存放activity实例的容器。通常当一个android应用程序启动时,如果当前环境中不存在该应用程序的任务栈,那么系统就会创建一个任务栈。此后,这个应用程序所启动的activity都将在这个任务栈中被管理。需要特别注意的是,一个任务栈中的activity可以来自不同的app,同一个app的activity也可能不在一个任务栈中。

任务栈的较大特点是先进后出。根据activity当前栈结构中的位置,来决定该activity的状态。正常情况下,android任务栈的工作情况如下图所示:




activity1处于栈顶位置,当在activity1中开启activity2时,activity2的实例会被压入栈顶的位置。




同样,在activity2中开启activity3时,activity3的实例也会被压入栈顶的位置。以此类推,无论开启多少个activity,最后开启的activity的实例都会被压入栈的顶端,而之前开启的activity虽然“功成身退”,却仍然保存在栈中,但活动已经停止。系统会保存activity被停止时的状态。




当用户点击返回按钮或者调用finish()方法时,activity3会被弹出栈,activity2处于栈顶位置并恢复activity2被保存的界面状态。

当然任务栈的这种工作特性并不完美,因此可以给activity设置一些“特权”,来打破这种“和谐”的模式。这种“特权”也就是下面我们将探讨的activity的启动模式。

二、activity的启动模式

activity启动模式有4种,分别是standard、singletop、singletask和singleinstance模式。

1.standard模式(标准模式)

standard模式是activity的默认启动方式,每启动一个activity就会在栈顶创建一个新的实例。因此,这种启动模式下会存在大量相同的实例。当然,这种模式下也允许存在相同的实例。

在实际开发中,闹钟程序通常使用这种模式。

例如:创建一个启动模式为standard的activitya,点击a跳转到a页面,点击两次 a->a->a,这样栈内就会出现三个相同的a实例,这时候点击返回键的时候你就会发现,我们需要点击三次返回键才能退出页面。




2.singletop模式(栈顶复用模式)

在某些情况下,会发现使用standard模式启动的activity并不合理。例如,当activity已经位于栈顶,再次启动该activity还需要创建一个新的实例压入任务栈,而不能直接复用之前的activity实例。

在这种情况下,使用singletop模式启动activity更合理,该模式会判断要启动的activity实例是否位于栈顶,如果位于栈顶,则直接复用,否则创建新的实例。实际开发中,浏览器的书签采用这种模式。

例如:创建两个activity a和b,将b的启动模式设置成singletop。点击a跳转到b,点击b跳转到b?, a->b->b?这时候点击返回按钮的时候,只需要点击一次就返回到a页面了。




3.singletask模式(栈内复用模式)

使用singletop模式虽然可以很好的解决栈顶重复压入activity实例的问题。但如果要启动的activity的未处于栈顶,则还会在栈中压入多个不相连的activity实例。需要activity在栈中有且只有一个实例,借助singletask模式可以实现。

当activity的启动模式指定为singletask时,每次启动该activity时,系统会首先检查栈中是否存在当前的activity实例,如果存在,直接使用该activity,并将当前activity的实例上面的所有实例全部弹出栈。实际开发中,浏览器主界面通常采用这张模式。

例如:创建两个activity a和b,将a的启动模式设置成singletask。点击a跳转到b,点击b跳转到a?, a->b->a?这时候点击返回按钮的时候,点击一次就退出页面了。




4.singleinstance模式

singleinstance模式是4种启动模式中最特殊的一种,指定singleinstance模式的activity会启动一个新的任务栈来管理该activity实例,无论从哪个任务栈中启动该activity,该activity实例在整个系统中都只有一个。android的桌面使用的就是该模式。

启动singleinstance模式的activity有两种情况:

情况一:要启动的activity实例在栈中不存在,系统先创建一个新的任务栈,然后压入activity。

情况二:要启动的activity实例已存在,系统把该activity所在的任务栈转移到前台,从而使activity展示。

实际开发中,来电界面通常使用该模式。

例如创建三个activity a、b、c,将b的启动模式设置成singleinstance,点击a跳转到b,点击b跳转到c,这时候点击返回按钮,你会发现会从c直接返回到a而不是b。因为b和a、c不是一个任务栈,b是单独、独立的一个任务栈。



上一篇: 从《hcia-harmonyos应用开发学习指南》起步成长为鸿蒙人才

下一篇: 华为认证笔试考券及hcie笔试成绩延期政策

在线咨询

您好,请问有什么可以帮您?我们将竭诚提供最优质服务!

网站地图