当 SystemUI 在 Android 启动时加载

When SystemUI loads in Android Boot

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

SystemUI 是最先启动的应用程序之一。因为锁屏、通知、状态栏或最近的应用程序视图等所有内容都是 SystemUI 的一部分。所以是的,SystemUI 在启动器启动之前启动

下面是一系列简要说明的步骤,希望能在引导时阐明 "loading" 系统 UI 组件的顺序。我将在 Android 4.2 上演示它,尽管其他版本的顺序非常相似。

  • SystemServer与核心系统服务"done"时,com.android.systemui包中的including StatusBarManagerService *, it informs the 3rd party code that the system is ready and starts the system UI (line 870), or more precise, SystemUIService**。
  • SystemUIService 只是一个 Android application component whose onCreate() method starts/initializes UI components and stores references to the components in the mServices[] array of SystemUI 类型。第一个元素 (mServices[0]) 是状态栏或系统栏(状态 + 导航栏)。
  • BaseStatusBar, the implementation of the abstract SystemUI class, does some UI stuff (like adding views to WindowManager etc.). Additionally it declares a range of abstract UI-related methods (e.g. createAndAddWindows()) to be implemented by subclasses, e.g. PhoneStatusBar.
  • 状态栏和导航栏不是由单个视图组成的。 BaseStatusBar 的 sub类 如 PhoneStatusBarTabletStatusBar 等 *** 处理多个 类 基本上是从 View whose drawing (so does status bar's drawing) takes place in the onDraw() 方法继承而来的。
  • 重要说明: 在系统启动时,状态栏(和软件导航栏)直到启动器 Activity(带有 android.intent.category.HOME) onResume() 方法 returns (并且 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/