Android帮助文档翻译——开发指南(三)任务和Back Stack

一个应用程序通常都包含了多个 activity 。每一个 activity 都应该回避设计成( designe around )能执行用户特定动作以及启动其它 activity 。例如,一个邮件应用程序需要有一个用来显示新邮件列表的 activity ,当用户选中了其中一个邮件时,将打开另一个新的 activit 浏览邮件内容。

一个 activity 甚至能打开设备上其它应用程序中的 activity 。比如,如果你的应用程序需要发送一个电子邮件,你就应该定义一个执行“ send ”动作并包含了邮箱地址、邮件内容等数据的意图( intent )。其它应用程序中声明处理这种意图的 activity 将会被打开。这种情况下,因为我们的这个意图是要去发送一个邮件,所以一个邮件应用程序的写邮件 activity 将会打开(如果有多个 activity 能处理这种意图,那么系统会让用户选择要哪一个去执行)。当邮件发送完毕后,你的 activity 将恢复出来,这样让那个邮件程序看起来像是你的应用程序的一部分。虽然多个 activity 可能是来自不同的应用程序,但是 Android 系统通过把这些 activity 放在同一个任务中,使得用户有无缝的体验。

一个任务就是用户执行某个特定工作过程中相互影响的 activity 的集合。这些 activity 按照打开的顺序放在一个栈中( back stack )。

设备的主界面是大多数任务的起点。当用户触摸了程序列表的一个图标或主界面的一个快捷方式时,一个应用程序任务将置于前台。如果没有与这个程序对应的任务时(由于这个程序最近没有使用),系统将创建一个新的任务,并把这个程序的“ main activity 作为栈的根 activity

当当前 activity 启动其它 activity 时,一个新的 activity 将被压到栈顶并获取到焦点。先前的 activity 虽然保留在栈中,但已经被停止了。当一个 activity 停止时,系统会保存它的用户接口界面的当前状态。这样当用户按返回键时,当前 activity 将多栈顶弹出(即这个 activity 被销毁),而之前的 activity 将被恢复( UI 之前的状态被恢复出来)。栈中的所有 activity 永远不会被重新组合排列,只有压栈和出栈两个动作,即当 activity 被启动则压入栈中,当用户按下返回键离开 activity 时从栈中弹出。正如上面所讲,这个 back stack 是一个遵循后进先出原则的对象结构。图 1 呈现了一个带时间轴的 activity 演变图,并给出了每次操作时 back stack 的状态。

 Android帮助文档翻译——开发指南(三)任务和Back Stack_第1张图片

1 演示了每一个 activity 如何增加一个条目到 back stack 中去。当用户按了返回键时,当前 activity 被销毁,先前的 activity 恢复。


如果用户连续按返回键时,栈中每一个 activity 将被弹出来以显示前一个 activity ,一直到用户返回到主界面或任务开始时正在运行的那个 activity 。当栈中的所有 activity 被弹出后,这个任务也将不复存在。

Android帮助文档翻译——开发指南(三)任务和Back Stack_第2张图片

2 两个任务:任务 A 在后台等待被恢复,而任务 B 在前台接收用户的交互信息


任务是一个当用户开户新的任务或回到主界面(通过按 HOME 键)时能够被移到后台的聚合单元。当任务在后台时,它里面的所有 activity 将被停止,但任务的 back stack 被完整地保存在内存中,即当有其它任务启动时,当前任务仅仅是失去了焦点而已,如图 2 所示。因为一个任务能够返回到前台,所以用户可以在它被停止的断点重新启动。举个例子,假如当前任务(称为“任务 A ”)在栈中有三个 activity ,其中两个在当前 activity 的下面。用户可以按下 HOME 键回到主界面并从程序列表中启动一个新的程序。当主界面出现时,任务 A 被置于后台。当打开一个新的应用程序时,系统将为这个新的程序启动一个带有它自己 activity 栈的任务(称为“任务 B ”)。经过一些操作后,用户又返回到主界面并选中之前的程序,这样就重新启动了任务 A 。这时任务 A 又回到了前台,即其栈中的三个 activity 是完整的,并且栈顶的 activity 会被恢复出来。此时,用户也可以通过返回到主界面再选中程序图标启动程序回到任务 B 中。这就是 Android 系统多任务的一个例子。

注:多个任务能同时运行在后台。如果用户在同一时间运行了很多个后台任务,系统可能为了回收内存而销毁后台的 activity ,这就导致了 activity 的状态会丢失。可以参考下面关于 activity 状态的章节。

 

待续……

你可能感兴趣的:(android,工作,UI,文档,任务)