第7章 Android启动流程

7.1 第一个系统进程(init)

Android 设备的启动必须经历3个阶段,即 Boot Loader、Linux Kernel 和 Android 系统服务,默认情况下它们都有各自的启动界面。作为 Android 中第一个被启动的进程,init 的 PID 值为0。它通过解析 init.rc 脚本来构建出系统的初始运行形态,其中最重要的就是 ServiceManager、Zygote 和 SystemServer。

7.2 系统关键服务的启动解析

Android 的“DNS服务器” -- ServiceManager

ServiceManager 是 Binder 机制中的“DNS服务器”,负责域名(某 Binder 服务在 ServiceManager 注册时提供的名称)到IP地址(由底层Binder驱动分配的值)的解析。

“孕育”新的线程和进程 -- Zygote

Zygote 字面意思是“受精卵”,Android 中大多数的应用进程和系统进程都是通过 Zygote 来生成的。

在启动 app_process 执行 ZygoteInit 中会创建一个新的进程启动 System Server,而后 app_process 所在的进程转变为 Zygote 的“孵化器”守护进程。

Android 的“系统服务” -- SystemServer

若在 init.rc 中为 Zygote 制定了启动参数 --start-system-server,那么 ZygoteInit 就会调用 startSystemServer 来启动 SystemServer。

  • Bootstrap Services(引导程序)
  • Core Services(LED和背光管理器、电池电量管理器、应用程序使用情况管理器等)
  • Other Services(xxService)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。