SystemUI的启动流程
SystemUI属于系统级别的UI,是Android系统的核心应用,在开机过程中就会启动,负责反馈系统以及应用的状态,并与用户保持大量的交互。本系列文章涉及到的代码来自AndroidP版本。
为什么说SystemUI是在开机过程中启动的呢?
Init 是所有Linux程序的起点,而Android的启动过程都由Zygote产生。init 是 zygote的父进程, 而system_server和其他所有的com.xxx结尾的应用程序都是从zygote fork 而来。前面的SystemServer的启动过程不在涉猎范围之内,在此不做赘述,有兴趣的朋友可以从这里了解。
我们直接从SystemServer是如何启动SystemUI开始。先来一张时序图,能比较清晰完整的了解SystemUI的启动流程。
在./frameworks/base/services/java/com/android/server/SystemServer.java文件中,有个main方法:
public static void main(String[] args) {
new SystemServer().run();
}
main方法中启动了run(),在run中启动了一系列的服务,在SystemServer代码中,对系统的服务类别分为三类:BootstrapServices(包含ServiceManager,ActivityManagerService,PackageManagerService,DisplayManagerService,PowerManagerService, LightsService等),CoreServices(包含BatteryService,UsageStatsService,WebViewUpdateService等),OtherServices(包含ConnectivityService, NetworkManagementService, storageManager, WindowManagerService, AlarmManagerService, SystemUI等)
private