android进阶解密 第六章 理解ActivityManagerService

一.android 7.0中的AMS家族

AMS家族中的关系图如下:

1.AMS是AMN的子类,也是他的功能实现类。

1.AMP和AMN共同实现了IActivityManager接口,这样他们实现了代理模式。所以AMP是AMS在client端的代理类。

2.AMP是在客户端进程,AMN是在服务端进程,AMN实现了Binder类,所以AMP和AMS可以实现跨继承的binder通信。

android进阶解密 第六章 理解ActivityManagerService

二、android8.0中AMS家族

android8.0 中AMS是通过AIDL实现进程间通讯的,所以去除了原先的AMP,代替他的是IActivityManager,他是AMS的本地代理。AMS只需要继承IActivityManager.Stub类就可以实现和ActivityManager的进程间通信。

三.AMS的启动过程。

从SystemServer的main方法到启动引导服务方法,AMS服务是在引导服务里面启动的。

四.AMS与应用程序进程关系

1.启动应用程序时,AMS会检查这个应用程序所需要的进程是否存在。

2.如果应用进程不存在,则AMS就会请求Zygote进程创建(fork)所需要的应用程序进程。

五.AMS中的重要数据结构

1.ActivityRecord:它的内部记录Activity的所有信息,它是用来描述一个Activity的。

2.TaskRecord:描述一个任务栈。

3.ActivityStack:是一个管理类,管理所有的Activity。

六.Activity的栈管理

TaskRecord包含多个ActivityRecord

ActivityStack包含多个TaskRecord

任务栈模型如下:

android进阶解密 第六章 理解ActivityManagerService