0%

Android系统启动-SystemServer进程启动

前言

本文是介绍Android系统启动——SystemServer进程。(基于Android 10.0的源码)

目录

ZygoteInit.forkSystemServer
Zygote.forkSystemServer
Zygote.nativeForkSystemServer
ZygoteInit.handleSystemServerProcess
ZygoteInit.zygoteInit
ZygoteInit.nativeZygoteInit
RuntimeInit.applicationInit
RuntimeInit.findStaticMain
MethodAndArgsCaller.run

SystemServer 进程启动过程:

  1. Zygote进程调用ZygoteInit.forkSystemServer开始fork进程
  2. 调用 Zygote.forkSystemServerfork 出SystemServer进程
  3. 调用ZygoteInit.handleSystemServerProcess处理SystemServer进程fork后的剩余工作
  4. 调用ZygoteInit.zygoteInit() 进行通用和native层的初始化,并启动Binder线程池,使system_server进程可与其他进程进程通信
  5. 调用RuntimeInit.applicationInit进行应用的初始化
  6. 调用RuntimeInit.findStaticMain反射进入SystemServer类的静态函数main()方法
SystemServer.main
SystemServer.createSystemContext
SystemServer.startBootstrapServices
SystemServer.startCoreServices
SystemServer.startOtherServices

SystemServer 进程执行过程,调用SystemServer.main方法:

  1. 调用createSystemContext()来创建ActivityThread对象和系统上下文
  2. 创建SystemServiceManager
  3. 启动各种系统服务并进行生命周期管理
  4. 调用Looper.loop(),进入处理消息的循环

总结

  • 1,启动Binder线程池,这样就可以与其他进程进行Binder跨进程通信。
  • 2,创建SystemServiceManager,它用于对系统服务进行创建,启动和生命周期管理。
  • 3,启动各种系统服务:引导服务,核心服务,其他服务。

引用文章:

Android系统启动——SystemServer启动

Android系统启动流程之SystemServer进程启动

Android系统启动-SystemServer上篇