读书人

android札记-task和back stack

发布时间: 2012-06-28 15:20:03 作者: rapoo

android笔记--task和back stack

[本文的图片来源于google SDK文档]

?

基本概念

task是一系列activity的集合, 这些activity通常因为同一目的而启动, 系统将这些activity按照创建的顺序组织在栈中(也就是所谓的backstack). 每一个task都拥有一个仅属于它的back stack.

例如一个联系人app, 当新建一个联系人时, 需要为这个联系人指定头像.这时会启动图片浏览器选择一张图片作为头像, 选择完成之后切换回联系人app. 在这个过程中, 至少会启动2个activity, 系统会将这2个activity安排在同一个task中, 给用户的感觉就好像是这2个activity是属于同一个app的.

home screen是大多数task创建的场所. 当用户点击homescreen的app图标时, 通常会新建一个task, 并将该app的"main activity"作为back stack中的root元素. 如果当前activity启动了另一个activity,新的activity会被压入back stack中并获得焦点. 前一个activity仍然在back stack栈中, 但处于stopped状态. 一个处于stopped状态的activity在内存中存有它的状态数据.

如果用户点击back键, 当前activity将从back stack中弹出并被系统销毁(调用了onDestroy()方法), 栈中的前一个activity成为新的栈顶元素并获得焦点(它的状态数据不会丢失).

栈中的activity不会有重新排序的机会,back stack只是简单的压入或弹出activity--当前activity启动了新的activity时将新的activity压入栈中, 当用户点击back键时弹出当前的activity, 仅此而已.

如果用户不停的点击back键, back stack中的activity将不断从栈中弹出, 直到回到homescreen. 当栈中所有的activity都已出栈时, 这个back stack和task将不复存在.

通过startActivity()方法启动一个activity需要一个intent, 设置intent的flag属性可以指定待启动的activity的launchMode. Intent的flag属性的可选值有:

1.?FLAG_ACTIVITY_NEW_TASK. 对应值为“singleTask”的launchMode.

2.?FLAG_ACTIVITY_SINGLE_TOP. 对应值为” singleTop”的launchMode.

3.?FLAG_ACTIVITY_CLEAR_TOP. 在launchMode中不存在对应的值. 表示如果待启动的activity已经在当前task的back stack中, 那么不再创建该activity的实例对象, 并将销毁栈中所有位于该activity之前的activity.

读书人网 >Android

热点推荐