2

如何知道系统 UI 何时在Android引导过程中加载?状态栏和导航栏视图到底画在哪里?与SystemUI特权应用程序一样,它是否在启动器应用程序(主屏幕)启动之前加载?我不知道。欢迎任何建议。

4

2 回答 2

8

下面是一系列简要说明的步骤,希望能对引导时“加载”系统 UI 组件的顺序有所了解。我将在Android4.2 上演示它,尽管其他版本的顺序非常相似。

  • SystemServer核心系统服务(包括StatusBarManagerService*)“完成”时,它会通知第 3 方代码系统已准备好并启动系统 UI(第 870 行),或者更准确地说,SystemUIServicecom.android.systemui包 ** 中。
  • SystemUIService只是一个Android 应用程序组件,其onCreate()方法启动/初始化 UI 组件并将对组件的引用存储在类型mServices[]数组中SystemUI。第一个元素 ( mServices[0]) 是状态栏或系统栏(状态 + 导航栏)。
  • BaseStatusBar,抽象SystemUI类的实现,做了一些 UI 的东西(比如添加视图WindowManager等)。此外,它声明了一系列抽象 UI 相关的方法(例如createAndAddWindows()),由子类实现,例如PhoneStatusBar.
  • 状态栏和导航栏不是由单个视图组成的。BaseStatusBarasPhoneStatusBar等的子类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 回答