AMS重要的数据结构

ActivityRecord部存储了activity所有信息,包括AMS的引用、AndroidManifes节点信息、activity状态、activity资源信息和activity进程相关信息,其中含有该AcitivityRecord所在的TaskRecord,这就将ActivityRecordTaskRecord关联在一起了

名称

类型

说明

service

ActivityManagerService

AMS引用

info

ActivityInfo

Activity中代码和AndroidManifes设置的节点,比如launchMode

launchedFromPackage

String

启动activity的包名

taskAffinity

String

Activity希望归属的栈

task

TaskRecord

ActivityRecord所在的TaskRecord

app

ProcessRecord

ActivityRecord所在的应用程序进程

state

ActivityState

当前activity的状态

icon

int

Activity的图标资源标识符

theme

int

Activity的主题资源标识符

 
 
TaskRecord
TaskRecord用来描述一个activity任务栈,其内部存储了任务栈的所有信息,包括任务栈的唯一标识符、任务栈的倾向性、任务栈的activity记录和AMS引用等,其中含有ActivityStack,也就是当前activity任务栈所归属的ActivityStack
其重要成员变量如下:

名称

类型

说明

taskId

int

任务栈的唯一标识符

affinity

String

任务栈的倾向性

intent

Intent

启动这个任务栈的Intent

mActivities

ArrayList<ActivtyRecord>

按照历史顺序排列的activity记录

mStack

ActivityStack

当前归属的ActivityStack

mService

ActivityManagerService

AMS的引用

 

ActivityStack
是一个管理类,用来管理系统所有 activity ,其内部维护了 activity 的所有状态、特殊状态的 activity 以及和 activity 关的列表等数据, ActivityStack 是由 ActivityStackSupervisor 来进行管理的
1 ActivityStack 的实例类型 : ActivityStackSupervisor 中有多种 ActivityStack 实例
2 ActivityState
ActivityStack 中通过枚举存储了 Activity 的所有状态
ActivityStack.java  services\core\java\com\android\server\wm\ ActivityStack.java
enum ActivityState {
        INITIALIZING,
        RESUMED,
        PAUSING,
        PAUSED,
        STOPPING,
        STOPPED,
        FINISHING,
        DESTROYING,
        DESTROYED,
        RESTARTING_PROCESS
    }

 

 

特殊状态的Activity: 

这些特殊的状态都是ActivityRecord类型,ActivityRecord用来记录一个activity的所有信息

 

ActivityStack中维护的ArrayList
ActivityStack 维护了元素类型为 TaskRecord 的列表,这样 ActivityStack TaskRecord 关联了, activity 任务栈存储在 ActivityStack 中。

ArrayList

元素类型

说明

mTaskHistory

TaskRecord

所有没有被销毁的activity任务栈

mLRUActivities

ActivityRecord

正在运行的activity,列表的第一个条目是最近最少使用的activity

mNoAnimActivities

ActivityRecord

 

不考虑转换动画的activity

mValidateAppTokens

TaskGroup

用于与窗口管理器验证应用令牌

 

ActivityRecord用来记录一个activity的所有信息

TaskRecord中包含了一个或多个ActivityRecord

ActivityStack又包含了一个或多个TaskRecord,它是TaskRecord的管理者

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值