前言
本文是介绍Android系统启动——SystemServer进程。(基于Android 10.0的源码)
目录
ZygoteInit.forkSystemServer
Zygote.forkSystemServer
Zygote.nativeForkSystemServer
ZygoteInit.handleSystemServerProcess
ZygoteInit.zygoteInit
ZygoteInit.nativeZygoteInit
RuntimeInit.applicationInit
RuntimeInit.findStaticMain
MethodAndArgsCaller.run
SystemServer 进程启动过程:
- Zygote进程调用
ZygoteInit.forkSystemServer开始fork进程 - 调用
Zygote.forkSystemServerfork 出SystemServer进程 - 调用
ZygoteInit.handleSystemServerProcess处理SystemServer进程fork后的剩余工作 - 调用
ZygoteInit.zygoteInit()进行通用和native层的初始化,并启动Binder线程池,使system_server进程可与其他进程进程通信 - 调用
RuntimeInit.applicationInit进行应用的初始化 - 调用
RuntimeInit.findStaticMain反射进入SystemServer类的静态函数main()方法
SystemServer.main
SystemServer.createSystemContext
SystemServer.startBootstrapServices
SystemServer.startCoreServices
SystemServer.startOtherServices
SystemServer 进程执行过程,调用SystemServer.main方法:
- 调用createSystemContext()来创建ActivityThread对象和系统上下文
- 创建SystemServiceManager
- 启动各种系统服务并进行生命周期管理
- 调用Looper.loop(),进入处理消息的循环
总结
- 1,启动Binder线程池,这样就可以与其他进程进行Binder跨进程通信。
- 2,创建SystemServiceManager,它用于对系统服务进行创建,启动和生命周期管理。
- 3,启动各种系统服务:引导服务,核心服务,其他服务。
引用文章: