Android自学笔记:Tasks and Back Stack原理

[size=x-large][color=indigo][b]一、参考文章[/b][/color][/size]
原文地址:[size=large][b][url=http://developer.android.com.nyud.net/guide/topics/fundamentals/tasks-and-back-stack.html]Tasks and Back Stack[/url][/b][/size]
本地地址:
.\android-sdk-windows\docs
\guide\topics\fundamentals\tasks-and-back-stack.html

[size=x-large][b][color=indigo]二、术语解释[/color][/b][/size]
1.task:一系列activity的集合,这些activity就可以看成是一个任务。
2.back stack:一系列activity的存储结构,因其遵循后进先出的原则,所以我个人译为“回退堆栈”,[color=red][b]但本文仍沿用英文代表其原义[/b][/color]。

[size=x-large][b][color=indigo]三、本文主旨[/color][/b][/size]
Android推崇一种用户体验方式,即不同应用程序之间的切换能使用户感觉就像是同一个应用程序,很连贯的用户体验,官方称其为seamless (无缝衔接);那么,这种用户体验的实现原理是怎样的?

[size=x-large][b][color=indigo]四、BackStack原理[/color][/b][/size]
我们首先来看一个图,该图展示了多个activity之间的切换并以时间线为线索展示这种行为,有些类似与UML中的时序图,

如下:

[align=center][img]http://dl.iteye.com/upload/attachment/454567/31098e42-a28b-36b9-9803-305f6d0a83b7.png[/img]

[/align]

要想理解此图,首先一定要弄明白什么是堆栈,堆栈的特性后进先出(LIFO),两个主要操作压入(push)和弹出(pop)。

我们在来看图中的back stack,栈顶的activity都是用户当前看到的activity;每当用户切换到一个新的activity时,

Android就会将其压入到stack back,使其成为栈顶,也就是用户当前看到的activity;栈顶后面的activity此时呈stop状态,对应着Activity生命周期方法中的onStop(),并且Android还会保留其状态(比如文本框上的文字等)。这是压入操作。

当用户按下BACK键,Android就会将back stack顶部的activity弹出来,紧随其后的activity顶上去,就实现了回退的功能。被弹出的activity此时呈destroy状态,对应着onDestroy(),新栈顶activity呈resume状态,对应着onResume()。这是弹出操作。

这个底层原理弄明白之后,高层的执行流程就很容易理解了,这里不做说明了。利用堆栈这种数据结构的特点很好地实现了“无缝衔接”的用户体验,而且效率也是蛮高的,

[size=x-large][b][color=indigo]五、任务原理[/color][/b][/size]
再来说说任务,根据“术语解释”当中介绍的,一个任务里面肯定会包含一个back stack,如果没有back stack的话,那么任务也就会结束了。理解这一点,我们可以引出下文。

任务的生命周期,简约版:
1.任务开始,按HOME键(这里要提出的是,如果你选择的应用程序先前没有打开过,也就是说没有开始一个任务,才会新

建一个任务)。
2.任务结束,一直按BACK键,直至回到HOME界面(未必只有此方式,有可能还是Android系统为回收内存而强行结束任务)。

任务的特点——聚合性:
所谓聚合性,指的就是任务中的那些activity会作为一个整体进行移动操作,比如将该任务放置到后台或前台。如下图:
[align=center][img]http://dl.iteye.com/upload/attachment/454571/8192bac9-0017-3c2d-98ee-c4f259e6754a.png[/img]
[/align]
此图描述的就是Android中的多任务场景,任务A和任务B内部都含有一个back stack,两个back stack互不干扰;当想切换回任务A时,只需按HOME键,再去选择先前的那个应用程序的icon即可。

另外针对任务,原文还指出了另外一个特性,同一个任务或不同任务中都可以保有多个相同的activity,如下图:
[align=center][img]http://dl.iteye.com/upload/attachment/454569/fa786f49-384e-32d8-88fc-97fd017ab341.png[/img]

[/align]
此特性是受back stack的特性限制而造成的,堆栈是一个LIFO的数据结构,所以说你不能够随便地更改它的数据顺序,因此上图中就有两个的Home Activity,但它们并不是同样的实例,而且状态也都是不一样的。

[size=x-large][b][color=indigo]六、总结[/color][/b][/size]
起初看到这块的时候,并不理解“无缝衔接”到底讲述的是啥意思;突然某一天在网上看到一个Android新款手机视频介绍,视频上那人用触屏的方式展示了那款手机的新功能,操作起来非常得行云流水,连贯性极强,之后我就明白了这就是传说中的“无缝衔接”的用户体验,所以就在此基础上学习并翻译了这篇文章,达到了事半功倍的效果。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值