基于 AOSP 9.0 分析。
开机流程
开机大致会经历如下几个过程:
- uboot 在引导 os 启动,然后加载 kernel;
- 当 kernel 加载完成后,进入 init 进程,fork 出 zygote,然后由 zygote 去启动 SystemServer;
- SystemServer 会启动系统运行所需的众多核心服务和普通服务,以及初始化和加载一些应用;
- 之后就进入到锁屏或者 Launcher,开机过程就基本结束了。
SystemUI 启动就是从 SystemServer 开始的。
序列图
SystemServer#main
SystemServer 名为系统服务进程,负责启动 Android 系统的关键服务,其入口是 SystemServer.main():
|
|
可以看到 main() 中生成了 SystemServer 对象并执行了 run 方法:
查看 startOtherServices():
通过
onCreate 方法中获得 SystemUIApplication 对象并调用其 startServicesIfNeeded 方法。
SystemUIApplication#startServicesIfNeeded
|
|
其中 config_systemUIServiceComponents 值在 AOSP/frameworks/base/packages/SystemUI/res/values/config.xml 里:
SystemUIApplication#startServicesIfNeeded
继续看 startServicesIfNeeded 方法:
可以看到 startServicesIfNeeded() 循环 start 了config_systemUIServiceComponents 里的 Service,这里的 Service 都是继承了 SystemUI 类的子服务,后续将一一分析这些 Service。这样,SystemUI 启动流程分析完毕。