四大组件之ActivityRecord

2022-12-13  本文已影响0人  安安_660c

一. 引言

BroadcastRecord,ServiceRecord都继承于Binder对象,而ActivityRecord并没有继承于Binder。 但ActivityRecord的成员变量appToken的数据类型为Token,Token继承于IApplicationToken.Stub。

appToken:system_server进程通过调用scheduleLaunchActivity()将appToken传递到App进程,

ServiceRecord本身继承于Binder对象,传递到客户端的代理:

二. ActivityRecord结构体

先以一幅图来展示AMS管理Activity所涉及的相关数据结构: 点击查看大图

activity_record

2.1 ActivityRecord

Activity的信息记录在ActivityRecord对象, 并通过通过成员变量task指向TaskRecord

再来说一说Activity类型和Activity状态的常量:

mActivityType:

ActivityState:

最后,说一说时间相关的成员变量:

时间点 赋值时间 含义
createTime new ActivityRecord Activity首次创建时间点
displayStartTime AS.setLaunchTime Activity首次启动时间点
fullyDrawnStartTime AS.setLaunchTime Activity首次启动时间点
startTime Activity上次启动的时间点
lastVisibleTime AR.windowsVisibleLocked Activity上次成为可见的时间点
cpuTimeAtResume AS.completeResumeLocked 从Rsume以来的cpu使用时长
pauseTime AS.startPausingLocked Activity上次暂停的时间点
launchTickTime AR.startLaunchTickingLocked Eng版本才赋值
lastLaunchTime ASS.realStartActivityLocked 上一次启动时间

其中AR是指ActivityRecord, AS是指ActivityStack。

2.2 TaskRecord

Task的信息记录在TaskRecord对象.

2.3 ActivityStack

所有前台stack的mResumedActivity的state == RESUMED, 则表示allResumedActivitiesComplete, 此时mLastFocusedStack = mFocusedStack;

2.4 ActivityStackSupervisor

home的栈ID等于0,即HOME_STACK_ID = 0;

三. Activity栈关系

3.1 Stack组成图

Activity栈结构体的组成关系,点击查看大图

ams_relations

(1)正向关系链表:

ActivityStackSupervisor.mActivityDisplays
-> ActivityDisplay.mStacks
-> ActivityStack.mTaskHistory
-> TaskRecord.mActivities
-> ActivityRecord

(2)反向关系链表:

ActivityRecord.task
-> TaskRecord.stack
-> ActivityStack.mStackSupervisor
-> ActivityStackSupervisor

注:ActivityStack.mDisplayId可找到所对应的ActivityDisplay;

四. 启动过程

Activity启动与停止流程,点击查看大图

Seq_activity

Activity的pause情况:

Activity的stop情况:

更多源码详细过程,见startActivity启动过程分析

本文转自 http://gityuan.com/2017/06/11/activity_record/,如有侵权,请联系删除。

上一篇下一篇

猜你喜欢

热点阅读