注:本文作者Nemo, http://blog.csdn.net/nemo__
一、包名
路径:frameworks/base/services/core/java/com/android/server/am/TaskRecord.java
包名:com.android.server.am.TaskRecord
父类:无
子类:无(final型)
二、概述
SDK/docs/guide/components/tasks-and-back-stack.html
A task is a collection of activities that users interact with when performing a certain job.
The activities are arranged in a stack (the back stack), in the order in which each activity is opened.
TaskRecord是一个虚拟的概念,它记录着启动的所有Activity序列,以及用户在按HOME键、Back键后,Activity界面跳转规则,这个栈被称为back stack
。它的成员ArrayList<ActivityRecord> mActivities
实现后进先出的跳转规则,位于top的ActivityRecord会在列表的末尾。
设备的桌面(HOME)是绝大多数Task启动的地方。当用户点击桌面某个应用图标时,以这个应用为root的Task会被拉到前台(Task顶部可能是其它Activity);如果没有这个应用的Task,会创建一个以此应用主Activity为root的Task。
在Task中的所有ActivityRecord,从来都不会重排序,只会进栈和出栈,遵循”后进先出”的原则。当一个Task中所有ActivityRecord均被remove时,这个栈也会被销毁。
Activity和TaskRecord默认情况下行为规则:
(1) ActivityA启动ActivityB,ActivityA状态stopped,系统会保持它的状态(滑块滚动位置、文本框输入等),当用户点击Back键时,ActivityA的状态会被恢复。
(2) 当用户按HOME键回到桌面时,当前Activity会被stop,它的Task将变为后台,系统会保存这个Task中的每个Activity的状态,如果用户再次桌面点击这个Task的根Activity对应的应用图标时,这个Task将会被resume,这个Task的顶部Activity会被resume。
(3) 当用户按Back键,当前Activity会出栈并且被destroy,前一个Activity会resume。系统不会保存被destroy的Activity状态。用户一直按Back键,Task会一直出栈直到回到桌面或启动这个Task的Activity。
(4) 一个standard属性的Activity可以被实例化多次,在不同的TaskRecord中。虽然一个Activity可以被启动多次,但过多的后台会被系统清理掉,那么destroy后的Activity状态就会丢失。当你需要一个被意外destroy的Activity保持之前的状态时,可以重写onSaveInstanceState()方法。
1. android:launchMode
SDK/docs/guide/topics/manifest/activity-element.html#lmode
android:launchMode
属性的四项值: