一、参考文章
原文地址: Tasks and Back Stack
本地地址:
.\android-sdk-windows\docs\guide\topics\fundamentals\tasks-and-back-stack.html

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

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

四、BackStack原理
我们首先来看一个图,该图展示了多个activity之间的切换并以时间线为线索展示这种行为,有些类似与UML中的时序图,

如下:





要想理解此图,首先一定要弄明白什么是堆栈,堆栈的特性后进先出(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()。这是弹出操作。

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

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

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

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

任务的特点——聚合性:
所谓聚合性,指的就是任务中的那些activity会作为一个整体进行移动操作,比如将该任务放置到后台或前台。如下图:


此图描述的就是Android中的多任务场景,任务A和任务B内部都含有一个back stack,两个back stack互不干扰;当想切换回任务A时,只需按HOME键,再去选择先前的那个应用程序的icon即可。

另外针对任务,原文还指出了另外一个特性,同一个任务或不同任务中都可以保有多个相同的activity,如下图:



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

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



更多相关文章

  1. Android如何把SearchManager和User Dictionary联系在一起
  2. Android开发笔记——查询通话记录及短信记录
  3. seekBard的使用方法
  4. Flutter 透明状态栏及字体颜色的设置方法
  5. 【android】Android(安卓)7.0适配步骤
  6. Android(安卓)顶部状态栏覆盖到应用之上?
  7. Android(安卓)利用服务Service创建标题栏通知
  8. android 申请map api
  9. android GPS定位,基站定位,WIFI定位开关的控制

随机推荐

  1. Android传感器高级编程
  2. NDK编译Android字符界面的可执行程序
  3. Hello, Android!
  4. Android(安卓)GSM驱动模块详细分析
  5. Android跨进程通信之非AIDL(二)
  6. 视图模式:Android ViewPager & WP Pivot
  7. Android问题(一)Android Studio 提示"Error
  8. Android(安卓)SDK更新后出现No target av
  9. Android生成和扫描二维码之ZXing
  10. 【Android】自定义控件之View原理与使用