如何知道系统 UI 何时在Android
引导过程中加载?状态栏和导航栏视图到底画在哪里?与SystemUI
特权应用程序一样,它是否在启动器应用程序(主屏幕)启动之前加载?我不知道。欢迎任何建议。
问问题
1347 次
2 回答
8
下面是一系列简要说明的步骤,希望能对引导时“加载”系统 UI 组件的顺序有所了解。我将在Android
4.2 上演示它,尽管其他版本的顺序非常相似。
- 当
SystemServer
核心系统服务(包括StatusBarManagerService
*)“完成”时,它会通知第 3 方代码系统已准备好并启动系统 UI(第 870 行),或者更准确地说,SystemUIService
在com.android.systemui
包 ** 中。 SystemUIService
只是一个Android
应用程序组件,其onCreate()
方法启动/初始化 UI 组件并将对组件的引用存储在类型mServices[]
数组中SystemUI
。第一个元素 (mServices[0]
) 是状态栏或系统栏(状态 + 导航栏)。BaseStatusBar
,抽象SystemUI
类的实现,做了一些 UI 的东西(比如添加视图WindowManager
等)。此外,它声明了一系列抽象 UI 相关的方法(例如createAndAddWindows()
),由子类实现,例如PhoneStatusBar
.- 状态栏和导航栏不是由单个视图组成的。
BaseStatusBar
asPhoneStatusBar
等的子类TabletStatusBar
*** 处理多个类,这些类基本上是从其View
绘图(状态栏的绘图也是如此)发生在onDraw()
方法中的子类。 - 重要提示:在系统启动时,状态栏(和软件导航栏)将不可见,直到启动器
Activity
(带有android.intent.category.HOME
)的onResume()
方法返回(并且 bootanimation 退出),尽管状态栏所包含的所有视图都有已经布置好了。
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/
于 2016-11-23T01:19:03.997 回答
1
SystemUI 是最早启动的应用程序之一。因为锁屏、通知、状态栏或最近的应用程序视图等所有内容都是 SystemUI 的一部分。所以是的,SystemUI 在启动器启动之前启动
于 2016-05-26T15:38:51.083 回答