Android SystemServer 启动流程
SystemServer 启动流程
一、介绍
- SystemServer 是 Android 进入 Launcher 前的最后准备,顾名思义,它提供了众多由 Java 语言编写的服务
- 在 Zygote 自启动过程中,参数
bool startSystemServer
为真的话,那么在ZygoteInit.java/main()
就会调用函数forkSystemServer()
生成 SystemServer 进程并启动 - SystemServer 进程主要用于创建系统服务,ActivityMangerService、PackageManagerService、WindowManagerService 这些重要服务都是通过 SystemServer 进程启动
SystemServer 从 frameworks/base/core/java/com/android/internal/os/ZygoteInit.java/ZygoteInit.java/forkSystemServer()
中开始研究
二、创建 SystemServer
三、处理 SystemServer
启动 Binder 线程池
- nativeZygoteInit() 是 Native 层代码,用于启动 Binder 线程池,以便 SystemServer 进程使用 Binder 与其他进程通信
进入 SystemServer 的 main()
四、解析 SystemServer 进程
服务启动举例
以 PowerManagerService 服务启动为例
五、总结
- 启动 Binder 线程,以便后续与其他进程通信
- 创建 SystemServiceManager,用于系统服务进行创建、启动和其他声明周期管理;
- 启动其他系统服务