当前位置: 首页 > news >正文

android system UI 基础的基础

Android 系统中的 SystemUI 是一种特殊的应用程序,它负责管理和显示设备的用户界面组件,例如状态栏、导航栏和最近任务列表等。SystemUI 是在 Android 启动过程中由 Zygote 进程启动的。以下是 SystemUI 启动过程的详细步骤:

SystemUI 启动过程

  • 1.启动 init 进程

    • Android 启动时,init 进程是第一个运行的用户空间进程。它会读取初始化脚本(通常是 /init.rc)来启动其他系统服务。
  • 2.启动 Zygote 进程

    • init 进程会启动 Zygote 进程。Zygote 是 Android 的应用程序进程启动器,所有的应用程序进程都是由 Zygote 派生出来的。
    • 在启动过程中,Zygote 会预加载一些核心类和资源,以加快应用程序的启动速度。
  • 3.启动 SystemServer 进程

    • Zygote 进程会启动 SystemServer 进程。SystemServer 是一个关键的系统进程,负责启动各种系统服务,包括 Activity Manager、Package Manager、Window Manager 等。
  • 4.启动 SystemUI 服务

    • SystemServer 进程会启动 SystemUI 应用程序。具体地,SystemUI 的启动是由 SystemServer 中的 SystemUIService 类来处理的。
    • SystemUI 的启动代码位于 com.android.systemui.SystemUIApplication 类中,该类会初始化各种系统 UI 组件。

具体启动代码示例 

以下是一些关键代码段,展示了 SystemUI 是如何启动的:

SystemServer.java 中启动 SystemUI 的代码

 

private void startOtherServices() {// ... other service starts ...// Start SystemUItraceBeginAndSlog("StartSystemUI");try {startSystemUi(context);} catch (Throwable e) {reportWtf("starting System UI", e);}traceEnd();// ... other service starts ...
}

 startSystemUi 方法

 

private void startSystemUi(Context context) {Intent intent = new Intent();intent.setComponent(new ComponentName("com.android.systemui","com.android.systemui.SystemUIService"));context.startServiceAsUser(intent, UserHandle.SYSTEM);
}

SystemUIApplication.java 初始化

public class SystemUIApplication extends Application {private List<SystemUI> mServices;@Overridepublic void onCreate() {super.onCreate();mServices = new ArrayList<>();// Add different SystemUI components here, such as StatusBar, NavigationBar, etc.mServices.add(new StatusBar(this));mServices.add(new NavigationBar(this));// Initialize all servicesfor (SystemUI service : mServices) {service.start();}}
}

总结

SystemUI 是在 Android 启动过程中由 SystemServer 进程通过 Zygote 进程启动的。SystemServer 通过调用 startSystemUi 方法来启动 SystemUI 应用程序,该应用程序的入口是 SystemUIApplication 类,它会初始化和启动各种系统 UI 组件。

http://www.lryc.cn/news/376295.html

相关文章:

  • ARM32开发——GD32F4定时器查询
  • 【机器学习】第7章 集成学习(小重点,混之前章节出题但小题)
  • 代码随想录——子集Ⅱ(Leecode 90)
  • vue关闭页面时触发的函数(ai生成)
  • 马尔可夫性质与Q学习在强化学习中的结合
  • 【LeetCode 5.】 最长回文子串
  • 联邦学习周记|第四周
  • 机器学习课程复习——逻辑回归
  • Rocky Linux 更换CN镜像地址
  • Linux rm命令由于要删的文件太多报-bash: /usr/bin/rm:参数列表过长,无法删除的解决办法
  • 【包管理】Node.JS与Ptyhon安装
  • SpringMVC系列四: Rest-优雅的url请求风格
  • Hexo 搭建个人博客(ubuntu20.04)
  • 【论文阅读】-- Attribute-Aware RBFs:使用 RT Core 范围查询交互式可视化时间序列颗粒体积
  • A类IP介绍
  • HTML5基本语法
  • 正则表达式常用表示
  • 【OpenHarmony4.1 之 U-Boot 2024.07源码深度解析】007 - evb-rk3568_defconfig 配置编译全过程
  • 11.1 Go 标准库的组成
  • 【UG\NX二次开发】UF 调用Grip例子(实现Grip调用目标dll)(UF_call_grip)
  • [算法刷题积累] 两数之和以及进阶引用
  • pytest+parametrize+yaml实例
  • 【HarmonyOS】鸿蒙应用模块化实现
  • 深入Node.js:实现网易云音乐数据自动化抓取
  • 【Docker实战】jenkins卡在编译Dockerfile的问题
  • rust 多线程分发数据
  • CentOS 7x 使用Docker 安装oracle11g完整方法
  • DDP算法之线性化和二次近似(Linearization and Quadratic Approximation)
  • Shellcode详解
  • sherpa-onnx说话人识别+语音识别自动开启(VAD)+语音识别Python API