android - 当 SystemUI 在 Android Boot 中加载时

标签 android android-source boot android-statusbar

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

最佳答案

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

  • SystemServer“完成”核心系统服务时,including StatusBarManagerService *,它通知第 3 方代码 system is ready并启动系统 UI(第 870 行),或更准确地说,SystemUIServicecom.android.systemui 包中 **。
  • SystemUIService 只是一个 Android application component谁的onCreate()方法启动/初始化 UI 组件并将对组件的引用存储在 SystemUImServices[] 数组中类型。第一个元素 (mServices[0]) 是状态栏或系统栏(状态 + 导航栏)。
  • BaseStatusBar ,抽象 SystemUI 类的实现,做一些 UI 的事情(比如添加 View 到 WindowManager 等)。此外,它还声明了一系列与 UI 相关的抽象方法(例如 createAndAddWindows()),这些方法将由子类实现,例如PhoneStatusBar .
  • 状态栏和导航栏不是由单个 View 组成的。 BaseStatusBar 的子类,如 PhoneStatusBarTabletStatusBar 等。*** 处理多个类,基本上是从 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/

相关文章:

Android 通知操作 : pending Intent not working

android - AOSP Android 中的永久后台服务?

android - 使用 repo 同步 android 源时出现 UnicodeDecodeError

android - 更换system.img后Android设备无法启动

android - 模型层(MVP)应该使用 Activity 引用

android - 抽屉导航 :- NullPointerException: Attempt to invoke virtual method 'java. lang.String android.content.Context.getPackageName()

android - 如何从首选项屏幕设置按钮位置?

git - 如何知道 Android 源代码中提交的发布版本?

c - 在启动时自动加载模块和目标文件

twitter-bootstrap - Bootstrap 3.1.1 : how to use its RTL?