Android 系统的启动流程

server/2025/2/8 20:34:49/

第一步,当用户按下手机电源键时,首先会从 ROM 中预定义的地方加载引导程序 Boot Loader 到 ARM 中;

  • ROM(Ready-Only-Memory):只读存储器,只能读出无法写入,即便是切断电源数据也不会丢失;

  • RAM(Random Access Memory):随机存取存储器,与 CPU 直接交换数据,随时读写,一旦断电,存储的数据也将丢失;

第二步,加载引导程序(Boot Loader);

  • Boot Loader 是 Android 系统启动前运行的一个微型程序,负责初始化硬件并加载操作系统内核(Linux Kernel);

第三步,启动 Linux Kernel,设置内存管理、进程调度、设备驱动等核心功能;

  • 在内核完成各种设置后,首先会在系统文件中寻找 init.rc 文件,启动 init 进程;

第四步,启动 init 进程;

  • init 进程时第一个用户级别的进程,进程号固定为 1。是所有用户空间进程的祖先;

  • init 进程的主要工作有:

    • 创建(mkdir)和挂载(mount)启动所需要的文件目录;

    • 初始化和启动属性服务(property service);

    • 解析 init.rc 配置文件并启动 Zygote 进程、Service Manager 进程等。Service Manager 主要用于管理系统服务;

第五步,启动 Zygote 进程。Zygote 进程是 Android 应用进程的孵化器;

  • Android 系统中有两种程序,一种是 Java 应用程序,主要是基于 ART(Android Runtime),所有的应用程序都属于这一类;另一种是 Native 程序,也就是 C/C++ 开发的程序,如 Boot Animation(开机动画);

  • 所有的 Java 应用程序以及 system_server 进程都是由 Zygote 进程 fork 出来的;Native 进程则是由 init 进程创建的;

  • Zygote 进程是通过 Socket 的方式与其他进程通信的,这里的“其他进程”主要指的是 system_server 进程;

第六步:启动 system_server 进程;

  • Zygote 进程孵化出 system_server 进程,该进程负责启动和管理 Android 的核心系统服务,如 ActivityManagerService - AMS、ActivityTaskManagerService - ATMS、WindowManagerService - WMS、PackageManagerService - PMS 等服务进程;

  • system_server 进程将这些服务注册到 Service Manager 中,以便其他进程可以通过 Binder 访问这些服务;

  • 在 system_server 进程启动并管理好核心服务后,系统会加载用户界面(如启动动画)。此时,用户可以在屏幕上看到 Android Logo 和启动动画;

  • 一旦系统启动完成,用户安装的应用程序也会被加载,用户可以可以使用各种应用程序和功能;

第七步,启动 Launcher 应用;

  • system_server 进程通过 ActivityTaskManagerService - ATMS 向 Zygote 进程发送请求,创建 Launcher 应用的进程,这就是用户看到的“手机桌面”;

  • 用户通过 Launcher 应用启动其他应用,系统会根据需要创建其他的应用进程;


http://www.ppmy.cn/server/166024.html

相关文章

JDBC笔记

简介 JDBC简单执行过程: 总结Java提供接口;数据库厂商提供实现;程序员调用接口;接口调用实现类,连接操作数据库 JDBC的概念 JDBC是Java提供的一组独立于任何数据库管理系统的API。 java操作数据库 步骤&#xff1a…

一键掌握多平台短视频矩阵营销/源码部署

短视频矩阵系统的介绍与应用 随着数字化营销策略的不断演进,传统的短视频矩阵操作方法可能已显陈旧。为此,一款全新的短视频矩阵系统应运而生,它通过整合多个社交媒体账户、创建多样化的任务、运用先进的智能视频编辑工具、实现多平台内容的…

如何使用 Excel 进行多元回归分析?

多元回归分析,一种统计方法,用来探索一个因变量(即结果变量)与多个自变量(即预测变量)之间的关系。广泛用于预测、趋势分析以及因果关系的分析。 听起来这个方法很复杂,但其实在 Excel 中可以很…

Docker镜像管理:掌握save/load与export/import的精髓

0x01 Docker Save & Load docker save: 用于将Docker镜像保存为.tar文件。这个过程会保存镜像的所有层、元数据和历史记录,因此生成的文件较大。当你需要备份或者迁移某个镜像时非常有用,尤其是当你需要保留镜像的全部构建历史以便将来在其他地方恢复…

在 Ubuntu 22.04 上运行 Filebeat 7.10.2

环境 操作系统:阿里云 Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-83-generic x86_64) 软件版本:Filebeat 7.10.2 用户:root 运行 下载 从这里下载 filebeat 7.10.2。 配置 简单配置一下 filebeat.yml,从标准输入采集&#xf…

Vue(4)

一.组件的三大组成部分-注意点说明 (1)scoped样式冲突 默认情况:写在组件中的样式会全局生效 → 因此很容易造成多个组件之间的样式冲突 ①全局样式:默认组件中的样式会作用到全局 ②局部样式:可以给组件加上scoped属…

深度学习与搜索引擎优化的结合:DeepSeek的创新与探索

目录 引言 1. 传统搜索引擎的局限性 2. 深度学习在搜索引擎中的作用 3. DeepSeek 实现搜索引擎优化的关键技术 3.1 神经网络与搜索引擎优化 3.2 自然语言处理与查询理解 3.3 深度强化学习与搜索结果排序 4. DeepSeek的深度学习架构 4.1 查询解析与语义理解 4.2 搜索排名与相…

【数据安全】现代智能手机的数据加密机制

这两天刷抖音看到一个降智视频,说手机拿去修了明明没给他密码,但是他是怎么导出手机的数据呢,而且很多人看你都会有这样的疑问:“我的手机设有锁屏密码数据真的安全吗?锁屏密码存在意义是不是仅限于防止别人进入桌面这…