Android SystemServer 启动流程

SystemServer 启动流程

一、介绍

  1. SystemServer 是 Android 进入 Launcher 前的最后准备,顾名思义,它提供了众多由 Java 语言编写的服务
  2. 在 Zygote 自启动过程中,参数 bool startSystemServer 为真的话,那么在 ZygoteInit.java/main() 就会调用函数 forkSystemServer() 生成 SystemServer 进程并启动
  3. SystemServer 进程主要用于创建系统服务,ActivityMangerService、PackageManagerService、WindowManagerService 这些重要服务都是通过 SystemServer 进程启动

SystemServer 从 frameworks/base/core/java/com/android/internal/os/ZygoteInit.java/ZygoteInit.java/forkSystemServer() 中开始研究

二、创建 SystemServer

image

三、处理 SystemServer

image

启动 Binder 线程池

  • nativeZygoteInit() 是 Native 层代码,用于启动 Binder 线程池,以便 SystemServer 进程使用 Binder 与其他进程通信

image

进入 SystemServer 的 main()

image

四、解析 SystemServer 进程

image

服务启动举例

以 PowerManagerService 服务启动为例

image

五、总结

  1. 启动 Binder 线程,以便后续与其他进程通信
  2. 创建 SystemServiceManager,用于系统服务进行创建、启动和其他声明周期管理;
  3. 启动其他系统服务
posted @ 2024-03-28 13:37  王清河  阅读(99)  评论(0编辑  收藏  举报