banner
fwrite

fwrite

好好生活
twitter
github
email

AMS

AMS 通过 SystemServiceManager 来启动#

AMS 通过 AMS#Lifecycle 内部类创建#

SystemService#startService 调用 onStart 方法#

构造函数#

AMS#setSystemProcess方法不只註冊自己 (AMS) 的 Server 到 Binder 驱动中,而是一系列与进程相关的服务,下表会提及几个常见的服务项目

Binder - AMS 功能#

要知道所有的 AMS 功能最好是去查詢 IActivityManager,它里面包含所有 AMS 所提供的功能,以下分为几种分类描述
组件状态 - 管理: 4 大组件的管理,startActivity、startActivityAndWait、startService、stopService、removeContentProvider … 等等
组件状态 - 查询: 查看当前组件的运行狀況 getCallingAcitivty、getServices… 等等
Task 相关: Task 相关的函数,removeSubTask、remove Task … 等等
其他: getMemoryInfo、setDebugApp… 等等

AMS 重点类#

AMS 相关类功能
ActivityStackSupervisor管理 Activity Stack
ClientLifecycleManagerAndroid 28 之後才加入,用來控制管理 Activity 的生命周期
ActivityStartActivity 启动器,也管理 Activity 的启动细节
ActivityStartController产生 ActivityStart 的实例,并且复用
ActivityTaskManagerService (简称 ATMS)Android 核心服务,负责启动四大组件
ActivityTaskManagerActivity 与 ATMS 跨进程通讯訊的接口,是 ATMS 的辅助类
ProcessRecord描述身分的数据
RecentTasks最近开启的 Activity
App 相关类功能
ActivityThreadApp 应用的进入点,启动主线程
ActivityThread#ApplicationThreadApplicationThread 是 ActivityThread 的内部类,继承 IApplication.Sub,它作为 APP 与 AMS 通讯的 Service 端
InstrumentationHook Activity 的启动、结束… 等等操作,应用 APP 与 AMS 的互交都透过 Instrumentation
ActivityStack以 Stack 为单位 (AndroidManifest 的四种启动方式有关),负责管理多个 Activity

ProcessRecord 进程管理#

ProcessRecord 类 - 进程相关讯息

参数说明
info : ApplicationInfoAndroidManifest.xml 中定义的 <\application> tag 相关信息
isolated : Booleanisolated 进程
uid : intuser id
pid : int进程 process id
gids : int[]群组 id
userId : intandroid 的多用户系统 id (就像是 windows 的多位使用者功能)
processName : String进程名,默认使用包名
uidRecord : UidRecord记录以使用的 uid
thread : IApplicationThread通过该物件 AMS 对 APP 发送讯息,该对象不为空代表该 APK 可使用
procStatFile:Stringproc 目录下每一个进程都有一个 以 pid 命名的目录文件,该文件记录进程的所有相关讯息,该目录是 Linux Kernel 创建的
compat : CompatibilityInfo兼容性信息
requiredAbi : Stringabi 讯息
instructionSet : String指令集合
mPkgDeps : ArraySet当前进程运行依赖的包

ProcessRecord 类 - 描述进程组件

参数说明
maxAdj : int进程的 Adj 上限 (adjustment)
curRawAdj : int正在计算的 adj,这个值可能大于 maxAdj

ProcessRecord 类 - 描述进程组件(四大零组件相关)

参数说明其他
mWindowProcessController : WindowProcessController透过 WindowProcessController 管理所有 ActivityActivity 用 ActivityRecord 來表示
mServices : ProcessServiceRecord该进程内所有的 ServiceService 用 ServiceRecord 来表示
mProviders : ProcessProviderRecord该进程内所有的 ProviderContentProvider 用 ContentProviderRecord 来表示
mReceivers : ProcessReceiverRecord该进程内所有的 ReceiverContentProvider 用 BroadcastRecord 来表示

ActivityRecord - Activity#

ActivityRecord 在记录一个 Activity 的所有讯息,它是 历史栈中的一个 Activity,内部纪录 ActivityInfo (AndroidManifest 设定)、task 服务

启动 Activity - 调用 ActivityTaskManagerService#

ActivityTaskManagerService 它也是一个系统服务(注册在 Binde r 驱动中),App 端如果要调用就必须透过代理,这个代理就是 ActivityTaskManager

Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.