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.