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

【Android基础回顾】三:Android启动流程

Android 系统的启动流程主要包括从设备加电开始,到系统完全启动并进入用户界面这一全过程,涉及到多个阶段。整个流程大致可以分为以下五大步骤:

1.Bootloader 阶段

这个阶段初始化硬件,启动内核(Linux Kernel)。
加电后,CPU从固定地址读取Boot ROM中的代码。Boot ROM会加载 Bootloader(如 Qualcomm 的 Little Kernel、Fastboot)。

Bootloader 做以下几件事:
初始化 CPU、内存(RAM)、电源管理芯片等基础硬件。
加载设备树(Device Tree)和内核镜像(zImage 或 Image.gz)。
把控制权交给内核(通过跳转到内核入口点)。

2.Linux Kernel 阶段

这个阶段主要是初始化系统核心组件,挂载根文件系统(RootFS)。

Kernel 开始执行,初始化调度器、中断控制器、内存管理、驱动等。
加载 initramfs(初始临时文件系统)。
挂载真正的 RootFS(一般为 system.img)。
启动第一个用户态进程 init。

3.init 进程阶段(用户空间初始化)

这个阶段启动核心服务和守护进程,为 Android Framework 做准备。

执行init.rc 脚本,配置服务和参数(如 zygote、servicemanager)。
启动 ueventd:管理设备节点的权限。
启动 vold:处理存储设备挂载。

4. Zygote 进程阶段

启动 Java 虚拟机,孵化(fork)出系统和应用进程。

init 启动 zygote(一个 Java 进程)。
Zygote 初始化 Dalvik/ART 虚拟机环境。
加载核心类库(如 android.*)、SystemServer。
后续所有 Java 应用进程都会由 Zygote 进程 fork() 出来。

5.SystemServer 与 Launcher 阶段

SystemServer是 Android Framework 的核心进程,负责启动系统服务。
包括 ActivityManagerService(AMS)、PackageManagerService(PMS)、WindowManagerService(WMS)等。

启动完成后,SystemServer 通知 AMS 启动 Launcher(桌面应用)。

总体流程如下:

在这里插入图片描述

Q&A

ServiceManager 在哪个阶段?

具体流程位置:

加电 → Bootloader → Kernel → init 进程 → 启动 ServiceManager → 启动 Zygote

首先,ServiceManager 是什么?它是 Binder IPC 的守护进程。
所有 Android 系统服务(如 AMS、WMS、PMS 等)都通过它注册和查找。
是 Android Binder IPC 的“注册中心”。

在 init.rc 脚本中可以找到类似的配置:

service servicemanager /system/bin/servicemanagerclass coreuser systemgroup system readproccriticalonrestart restart zygote

init 会解析 init.rc,并启动 /system/bin/servicemanager 这个可执行文件。
因为Zygote、SystemServer 启动后,都会通过 ServiceManager 注册或查询系统服务。所以 ServiceManager 必须在 Zygote启动之前完成启动。

http://www.xdnf.cn/news/12043.html

相关文章:

  • 使用Python提取PDF元数据的完整指南
  • 《棒球百科知识》1号位是什么位置·野球1号位
  • 三甲医院“AI平台+专家系统”双轮驱动模式的最新编程方向分析
  • 基于51单片机的天然气浓度检测报警系统
  • 第14节 Node.js 全局对象
  • AI系统微服务架构——服务网关与API网关
  • STM32发送MQTT请求到Onenet
  • 基于 TensorFlow 2 的 WGAN来生成表格数据、数值数据和序列数据。 WGAN生成对抗网络。代码仅供参考
  • kubernetes jenkins pipeline优化拉取大仓库性能指定分支+深度
  • 【物联网-S7Comm协议】
  • 快速用 uv 模拟发布一个 Python 依赖包到 TestPyPI 上,以及常用命令
  • scDown:单细胞RNA测序下游分析管道-文献精读140
  • Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
  • Win10停更,Win11不好用?现在Mac电脑比Win11电脑更便宜
  • 邮件多分类
  • Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
  • 【个人笔记】数据库原理(西电)
  • 使用 C/C++ 和 OpenCV 添加图片水印
  • 045-代码味道-数据泥团
  • 量子比特实现方式
  • 【Linux基础知识系列】第十一篇-Linux系统安全
  • 2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案
  • 「数据分析 - NumPy 函数与方法全集」【数据分析全栈攻略:爬虫+处理+可视化+报告】
  • 如何基于Mihomo Party http端口配置git与bash命令行代理
  • Kafka 核心架构与消息模型深度解析(二)
  • graylog收集rsyslog实现搜索解析
  • Linux驱动:register_chrdev_region、 alloc_chrdev_region
  • Kaggle-Predicting Optimal Fertilizers-(多分类+xgboost)
  • 灵活控制,modbus tcp转ethernetip的 多功能水处理方案
  • 第二章 2.4 数据共享与使用之数据共享方式