目录
概述
重点和难点问题
启动方式
main入口:
run方法:
BootstrapSevices
小结:
与其他线程的通信原理
参考文档:
概述
AMS是Android系统主要负责四大组件的启动,切换,调度以及应用程序进程管理和调度等工作。
ATMS是系统服务,管理Activities和其他容器(task,stacks,display……)
主要依靠binder的方式进行跨进程通信。
重点和难点问题
启动方式
代码位置
frameworks/base/services/java/com/android/server/SystemServer.java
frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
frameworks/base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
frameworks/base/services/core/java/com/android/server/SystemServiceManager.java
是由SystemServer启动的服务之一
main入口:
/**
* The main entry point from zygote.
*/
public static void main(String[] args) {
new SystemServer().run();
}
run方法:
记录进程的启动信息
系统时间
后面再设置一下数据库的兼容性就开始进入SystemServer了
虚拟机的内存设置
bundle和线程的一些设置
然后就开始初始化本地service
创建上下文context
创建SystemServiceManager
添加系统服务,并准备线程池来初始化并行任务
然后就开始start Service了
然后初始化虚拟机,就进入Looper.loop()循环
BootstrapSevices
启动watchdog
SystemServer初始化线程池
等待installd的启动完成,以有机会有权限创建关键目录,例如:/data/user,
需要先完成这个再初始化其他的服务。
在某些情况下,启动一个app后我们需要访问设备标识符,因此需要在ActivityManager之前注册设别标识符策略。
Uri Grants Manager.
接下来就是启动ActivityManager了
先启动 ATMS的服务,再启动AMS的服务。Android10之前,AMS是主要负责对四大组件进行管理和调度,同时AMS也会对进程,电池,内存,权限等进行管理。再Android10开始,就把Activity的管理迁移到了ActivityTaskManagerService中,ActivityTaskManagerService也被缩写为ATMS。
ATMS并不是直接启动,而是SystemServiceManager通过 Lifecycle类来间接实现。 SystemServiceManager是一个辅助类,它用于辅助SystemServer进程启动和管理SystemServer进程中的各类服务Service。
由于需要管理的服务非常多,所以SystemServiceManager是通过管理所有实现了SystemService接口的类的方式来统一的运用反射启动这些服务。
Lifecycle 是 ATMS 里的静态内部类,静态内部类不依赖于外部类,它封装了ATMS对象,同时实现了SystemService接口。Lifecycle 构造方法调用时,会初始化内部成员变量 mService,即调用ATMS的构造方法,构造方法中会执行一些初始化操作。
....
梳理一下ATMS的startService:
首先:startService()内部是运用了反射获取到了serviceClass类的对象实例service,然后再调用startService(service)。就是说ATMS将自己的服务发布到ServiceManager上去,方便其他进程调用ATMS服务。
然后,调用Lifecycle中的onStart函数,通过这个onStart函数,将ATMS的本地服务保存到LocalServices列表中。
小结:
AMS&ATMS启动流程:
- 是SystemServer进程中的服务
- 是在SystemServer进程启动的时候启动的服务
- 他们启动的过程是由SystemServer通过SystemServiceManager对象进行统一管理
- ATMS&AMS会将自己的binder发布到ServiceManger进程
- ATMS&AMS会将自己的本地服务发布到LocalServices列表
与其他线程的通信原理
(未完待续……)
参考:
https://blog.51cto.com/u_16099299/6562938
https://article.juejin.cn/post/7250025436016492605
AOSPXRef