systemui 的启动流程是怎么样的?
SystemUI 是 Android 系统中的一个重要组件,负责显示状态栏、通知栏、锁屏界面等系统级 UI 元素。以下是 SystemUI 的启动流程:
1. SystemServer 触发 SystemUI 启动
-
在 Android 系统启动过程中,
SystemServer
进程会调用startOtherServices()
方法
-
在该方法中,
ActivityManagerService
的systemReady
回调方法会触发startSystemUi()
方法 -
startSystemUi()
方法会通过PackageManagerInternal
获取SystemUIService
的组件名称,并通过startServiceAsUser()
方法启动SystemUIService
2. SystemUIService 启动
-
SystemUIService
是 SystemUI 的入口点,继承自Service
类
-
在
SystemUIService
的onCreate()
方法中,会调用SystemUIApplication
的startServicesIfNeeded()
方法
3. SystemUIApplication 初始化组件
-
SystemUIApplication
的startServicesIfNeeded()
方法会通过资源文件获取所有需要启动的 SystemUI 组件类名
-
然后通过反射机制创建这些组件的实例,并调用它们的
start()
方法 -
如果系统已经启动完成(
bootCompleted
),还会调用组件的onBootCompleted()
方法
4. 核心组件启动
SystemUI 包含多个核心组件,例如:
-
状态栏(StatusBar):创建状态栏窗口、初始化通知管理、注册广播接收器等
-
导航栏(NavigationBar):初始化导航栏相关功能。
-
锁屏界面(Keyguard):通过
WindowManagerService
绑定锁屏服务 -
通知面板(NotificationPanel):管理通知的显示和交互。
-
音量控制 UI(VolumeUI):初始化音量控制功能。
-
最近任务管理(Recents):管理最近任务的显示和切换
5. 组件协作
-
SystemUI 的各个组件通过
Dependency
注入器相互协作
-
它们还与
WindowManagerService
紧密配合,管理窗口的显示和交互
总结
SystemUI 的启动流程涉及多个系统服务和组件的协作。从 SystemServer
触发,到 SystemUIService
启动,再到 SystemUIApplication
初始化各个核心组件,整个过程环环相扣,确保系统 UI 的正常运行
https://juejin.cn/post/7509740897153384457
https://juejin.cn/post/7509740897153384457