haohao

Android 系统启动流程

Markdown

凡事都往好的一面去想,这种习惯比收入千磅还好

对于 Android 系统的启动流程,每一位 Android Developer 都应该烂熟于心,它在某种程度上代表着 Android 开发的学习路线。本篇感性地介绍一下 Android 系统的启动流程。

Android 系统启动流程示意图

Markdown


图片来自于网络

启动过程: Loader -> Kernel -> Native -> Framework -> App 。

Android 系统启动过程

Loader

Loader 层执行过程分为两步:

  1. Android 设备上电以后,引导芯片执行固化在 Boot ROM 里的启动引导代码,加载 Boot Loader 代码到内存;
  2. Boot Loader 代码开始执行,检查 RAM ,完成硬件的初始化,加载Linux内核代码到内存。

Kernel

Linux 内核开始启动,初始化各种软硬件环境,加载驱动程序,挂载根文件系统,执行init程序。

Native

  • init 进程 fork 出 logd 、 healthd 、 installd 、 adbd 等用户守护进程;
  • 启动 ServiceManager 和 MediaServer(本地服务);
  • fork 出 Zygote 进程,Zygote 进程是所有 Java 进程的父进程

Framework

Framework 层由 C++ Framework 层和 Java Framework 层组成。

C++ Framework 层

C++ Framework 层主要运行本地服务,即 MediaServer 进程,它是由 init 进程 fork 而来,负责启动和管理整个 C++ framework ,包含 AudioFlinger ,Camera Service 等服务。

Java Framework 层

Java Framework 层主要运行 SystemServer 进程,SystemServer 进程是 Zygote 进程 fork 出的第一个 Java 进程,SystemServer 负责启动和管理 Java Framework ,主要管理 Android 服务,如 ActivityManagerService ,NotificationManagerService ,WindowManagerService 等,它们均以线程的方式运行在 SystemServer 进程中。

App

Zygote 进程 fork 出来的第一个 App 进程是 Launcher ,即桌面 App ,所有的 App 进程都是由 Zygote 进程 fork 生成的。



联系我

Wechat ID

公众号

生活不止于眼前的苟且, 还有诗和远方的田野