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通信。
二、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
任务栈模型如下: