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

Android 系统的启动流程

第一步,当用户按下手机电源键时,首先会从 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.kler.cn/a/533729.html

相关文章:

  • Java 大视界 -- Java 大数据在智慧文旅中的应用与体验优化(74)
  • React+AI 技术栈(2025 版)
  • 并发编程 - 线程同步(三)之原子操作Interlocked简介
  • git-secret 使用教程
  • Spring Security(maven项目) 3.0.3.0版本
  • 在React中使用redux
  • 【华为OD-E卷 - 112 任务最优调度 100分(python、java、c++、js、c)】
  • 互联网行业常用12个数据分析指标和八大模型
  • Vue 2 与 Vue 3 的主要区别
  • C++六大默认成员函数
  • 模型蒸馏:DeepSeek-R1-distill-llama-70B
  • 【MQTT协议 03】 抓包分析
  • MySQL表的CURD
  • Java 2024年面试总结(持续更新)
  • 侯捷 C++ 课程学习笔记:深入理解 C++ 核心技术与实战应用
  • matlab小波交叉功率谱分析源代码
  • Day36【AI思考】-表达式知识体系总览
  • P5251 [LnOI2019] 第二代图灵机 Solution
  • 防御保护作业1
  • 19.[前端开发]Day19-王者荣项目耀实战(二)
  • 【缴纳过路费——并查集】
  • 嵌入式经典面试题之操作系统(二)
  • 【Block总结】DASI,多维特征融合
  • 人工智能DeepSeek培训讲师叶梓AI大模型DeepSeek基础培训提纲
  • 【大数据技术】用户行为日志分析(python+hadoop+mapreduce+yarn+hive)
  • ce修改器lua加载错误是怎么回事