关于Tasks and Back Stack的理解

学习Android Framework已有一个多星期了,对于Activity的加载始终一知半解。一直就感到疑惑的是,按“back”键后,怎么Activity的运行记录就会消失,这个机制到底是怎么一回事?

今天,花了一个上午仔细阅读官网中Tasks and Back Stack后,忽然有种豁然开朗的感觉。下面就谈谈我的理解吧,希望对大家有帮助,有错的地方还望各位看官斧正!

 

如上图所示,本话题主要涉及三个主体,back stack,task和activity。

其中,back stack和task是一个堆栈。而说到堆栈就离不开栈元素、栈顶、栈底、出栈和入栈。

back stack的栈元素是task,而task的栈元素是activity。处于back stack的栈底的那个task,其栈底元素就是桌面(home screen)activity。关于这点其实很好理解,因为每次我们最终退出程序以后,都会返回到桌面上。相对于栈底,就要说一说栈顶了。处于back stack顶部的那个task,他的栈顶元素activity就是用户当前正在交互的那个activity。

除此之外,栈还有一个很重要的地方就是,出栈和入栈。先从入栈说起吧,back stack每次打开一个应用程序,对会为其生成一个task,之后有关于这个应用程序的activity会会作为这个task的栈元素进行出栈入栈。但是,也不是所有的有关于这个应用程序的activity都会在一个task中,我们可以通过intent中flag和activity的affinity属性项来将某些activity从这个应用程序中划分开来。当然,通过这两个属性的设置,还可以将不同应用程序的activity划分到同一个task上。

说罢入栈,咱们再来聊一聊出栈。不知道大家有没留意到back stack这个名字。back的意思,在这里不是后备的意思,而是对应手机中的back返回按键。当我们每按一次back键的时候,处于back stack栈顶的那个task就会将其最顶的那个activity出栈。当这个task为空的时候,这个task也会从back stack中出栈。

除了出栈和入栈之外,back stack会有其他的行为。比如说,某个activity设置为singletask,意为这个activity仅会在一个task中实例化一次,如果系统需要调用这个activity实例的时候,系统中已经存在这个activity实例,那么系统就不会按照默认行为,再次实例化这个activity并将这个activity实例压入栈顶task中,而是将处于back stack中那个拥有这个activity实例的task抽出来,放到back stack的栈顶中。

以上只是我的个人见解,转载请注明出处,方便更正,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值