Android开发指导随译(2) — 应用程序基本原理(5)
Activities与Tasks(任务)
一个Activity可以启动另一个Activity, 即使该Activity定义在另一个应用程序中. 用户无法区分出这两个Activity有可能是定义并运行在不同的应用程序进程中.
Android在同一个Task中维持这两个Activity, 以保持用户的体验. 简单而言, 对用户体验来说, 一个Task就是一个”应用程序”. 它是一组相关的activity,并组织在同一个堆栈中. 堆栈中根activity(root activity)就是启动当前task的activity. 堆栈最顶部的activity就是当前正在运行的activity. 当一个activity启动另一个activiey, 新的activity就推入堆栈, 称为当前运行的activity. 以前的activity保留在栈中. 当用户按下BACK键, 当前activity就从堆栈中弹出, 以前的activity恢复为当前运行的activity.
堆栈中可以包含多个对象. 如果一个task包含同一个activity的多个实例, 堆栈对每个实例都有一个独立的入口(entry). 栈中的activity永远不会重新进行调整, 只有推进(Push)和弹出(Pop).
task就是activities的栈. 没有办法对task中所有的activities独立设置值(笔注: 是指变量值吗?). task的值只能设置在根activity中.
task中的所有activities作为一个单元共同进行移动. 整个task可以设置到前台运行, 也可以送到后台运行.
亲和(Affinities)与新task
缺省情况下, 应用程序中的所有Activities共有一个affinity. 每个activity也可以设置独立的affinity. 定义在不同应用程序中的activities可以共享同一个affinity. 在同一个应用程序中的activities可以分配不同的affinities.
FLAG_ACTIVITY_NEW_TASK标识
如果传递给startActivity()的Intent包含FLAG_ACTIVITY_NEW_TASK标识, 系统会查找不同的task来承载当前的activity. 通常, 这会是个新task. 如果已经有一个task具有与当前activity相同的affinity, 则当前的activity会登录进该task.
allowTaskReparenting属性
如果allowTaskReparenting属性设置为true, activity可以从启动它的task移到另一个具有相同affinity的task中.
启动模式
standard (缺省模式)
singleTop
singleTask
singleInstance