在Android Boot中加载SystemUI时

Sub*_*rat 1 boot android android-source android-statusbar

如何知道系统UI何时在Android启动过程中加载?状态栏和导航栏视图的确切位置在哪里?作为SystemUI特权应用程序,它是否在启动器应用程序(主屏幕)启动之前加载?我不确定.任何建议都是受欢迎的.

Oni*_*nik 7

下面是一系列简要说明的步骤,希望能够阐明在启动时"加载"系统UI组件的顺序.我将在Android4.2 上演示它,尽管其他版本的序列非常相似.

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