【Android源码-AMS】(五) TaskRecord

TaskRecord是Android系统中记录Activity启动序列的关键概念,它维护着Activity的启动规则。TaskRecord的taskAffinity属性决定了Activity的归属和启动模式下的实例管理。在用户操作如HOME键、BACK键后,TaskRecord遵循"后进先出"原则管理Activity。TaskRecord的启动模式、affinity、allowTaskReparenting等属性共同决定了Activity的启动、销毁及状态恢复行为。
摘要由CSDN通过智能技术生成

注:本文作者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属性的四项值:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值