如何知道系统 UI 何时在 Android
启动过程中加载?
状态栏和导航栏 View 到底绘制在哪里?
由于 SystemUI
是一个特权应用程序,因此它是否会在启动器应用程序(主屏幕)启动之前加载?
我不知道。欢迎提出任何建议。
最佳答案
下面是一系列简要说明的步骤,希望能对启动时“加载”系统 UI 组件的顺序有所了解。我将在 Android
4.2 上进行演示,尽管其他版本的顺序非常相似。
- 当
SystemServer
“完成”核心系统服务时,includingStatusBarManagerService
*,它通知第 3 方代码 system is ready并启动系统 UI(第 870 行),或更准确地说,SystemUIService
在com.android.systemui
包中 **。 SystemUIService
只是一个Android
application component谁的onCreate()
方法启动/初始化 UI 组件并将对组件的引用存储在SystemUI
的mServices[]
数组中类型。第一个元素 (mServices[0]
) 是状态栏或系统栏(状态 + 导航栏)。-
BaseStatusBar
,抽象SystemUI
类的实现,做一些 UI 的事情(比如添加 View 到WindowManager
等)。此外,它还声明了一系列与 UI 相关的抽象方法(例如createAndAddWindows()
),这些方法将由子类实现,例如PhoneStatusBar
. - 状态栏和导航栏不是由单个 View 组成的。
BaseStatusBar
的子类,如PhoneStatusBar
、TabletStatusBar
等。*** 处理多个类,基本上是从View
继承而来的。其绘图(状态栏的绘图也是如此)发生在onDraw()
中方法。 - 重要说明:在系统启动时,状态栏(和软件导航栏)直到启动器
Activity
(带有android.intent.category.HOME
的启动器)才可见。 )onResume()
方法返回(并且 bootanimation 退出),尽管状态栏组成的所有 View 都已经布置好。
AOSP:
* frameworks/base/services/java/com/android/server/
** frameworks/base/packages/SystemUI/src/com/android/systemui/SystemUIService.java
*** frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/
关于android - 当 SystemUI 在 Android Boot 中加载时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37465026/