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

【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.lqws.cn/news/151471.html

相关文章:

  • 44、web实验-后台管理系统基本功能
  • CentOS 7 如何pip3安装pyaudio?
  • 【ArcGIS应用】ArcGIS‌应用如何进行影像分类?
  • Eureka REST 相关接口
  • OpenAI技术路线急转:从TypeScript到Rust的Codex CLI重构内幕
  • Java八股文——集合「List篇」
  • 深度学习习题2
  • 10_聚类
  • vlan(虚拟局域网)逻辑图解+实验详解
  • ceph pool 修改故障域
  • 并发编程 - go版
  • android知识总结
  • 深入学习RabbitMQ队列的知识
  • RabbitMQ实用技巧
  • Soundprivacy
  • hbase资源和数据权限控制
  • 通过BUG(prvIdleTask、pxTasksWaitingTerminatio不断跳转问题)了解空闲函数(prvIdleTask)和TCB
  • 8.axios Http网络请求库(1)
  • Cilium动手实验室: 精通之旅---4.Cilium Gateway API - Lab
  • C# 中的 IRecipient
  • Vue事件总线
  • Cad 反应器 cad c#二次开发
  • 网络测试实战:金融数据传输的生死时速
  • 第16期_网站搭建_Go个人版网络验证 虚拟主机搭建笔记 不推荐没卡密没完全搭建成功
  • 26考研 | 王道 | 计算机组成原理 | 三、存储系统
  • Selenium常用函数介绍
  • C++自定义简单的内存池
  • App使用webview套壳引入h5(三)——解决打包为app后在安卓机可物理返回但是在苹果手机无法测滑返回的问题
  • C++学习-入门到精通【14】标准库算法
  • 996引擎-自定义装备/道具:限时装备、限时道具