[Android] Activity栈和Task

Activity栈

当用户在Application中,从一个Activity跳到另一个时,Android系统会 保存一个用户访问Activity的线性导航历史。 这就是activity栈,也被称为返回栈。 一般来说,当用户运行一个新的Activity,这个Activity就会被加到Activity栈里。因此,当用户 按BACK键的时候,栈中的上一个Activity就会被展示出来。 用户可以一直按BACK键,直到返回到了主屏。 返回操作可以使用户从当前Task回到上一个Task。 用户可以在应用管理器、主屏、或者“最近Task”屏幕,恢复到刚刚的Task。只有Activity可以加到Activity栈里去,其它的,包括View、Window、Menu或者Dialog都不行。 这就是说,假设,界面A跳到界面B,然后用户可以用BACK跳回界面A。这种情况下,A和B都要被实现成Activity。 这个规则有一个例外的情况。那就是除非你的应用 控制了BACK键并且自己管理界面导航。


Task

Task就是一个栈

一个Task是用户可以完成一个特定目标的一组Activity。与Activity属于哪个Application无关。 除非明确地新建一个Task,(参考打断Task),用户启动的所有Activity都默认是当前Task的一部分。 需要注意的是,这些Activity可能属于任何一个Application — 属于同一个Application或者属于不同的Application。 这就是说,一个Task可以是,从联系人列表开始,然后选择一个邮箱地址(通过电邮Activity),然后附加一个照片(通过图片Activity)。 联系人列表、电邮、图片,这些都存在于不同的Activity中。

启动Task的Activity被称作根Activity。 通常,Task是从应用管理器、主屏或者最近Task(长按HOME键)开始的。 用户可以通过点击根Activity的图标回到Task里去,就像启动这个Activity一样。 在这个Task中,BACK键可以回到这个Task的前一个Activity里。 Activity栈可以由一个或多个Task组成。


打断Task

 Task的一个重要的特性就是,用户可以中断他当前正在做的事(他的任务),去进行另一个Task,然后可以返回到原来的那个Task去完成它。 这个特性的意图,就是用户可以同时运行多个任务,并且可以在这些任务间切换。 有两种主要的的方法离开一个Task,这两种情况中,应该让用户能够返回到他们离开的那个任务:
用户被Notification打断 – 来了一个通知,用户开始关注处理这个通知
用户决定开始另一个任务 - 用户按了HOME键,然后开始了另一个Application

当然,规则总是有例外。除了上面提到了两种方法,确实存在第三种方法开始一个新任务,即,在代码中startActivity的时候,定义它要开始一个新 Task。 地图和浏览器两个应用就是这么做的。 例如,在电邮中点击一个地址,会在新Task调出地图Activity,在电邮中点击一个链接,会在新的Task中调出浏览器。 在这种情况下,BACK键会回到上一个Activity(另一个Task中的电邮Activity),因为它不是从主屏启动的。

你可能感兴趣的:([Android] Activity栈和Task)