天天看点

大厂永恒敲门砖——Android 系统启动流程详解

作者:愿天堂没有代码

正文

AMS 是 Android 中最核心的服务之一,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,其职责与操作系统中的进程管理和调度模块相类似,它本身也是一个 Binder 的实现类,应用进程能通过 Binder 机制调用系统服务

在大多数情况下,每个 Android 应用都在各自的进程中运行;当需要运行应用的一些代码时,系统会为应用创建此进程,并使其保持运行,直到不再需要它且系统需要回收其内存以供其他应用使用

所以熟悉 Android 启动流程不仅决定了大厂永恒敲门砖,更能体现出工作中最能突显价值的金字招牌

再者近几年面试官也是进一步向深、向广

问题1:你了解Android系统系统启动流程吗?

问题2:system_server为什么要在Zygote中启动,而不是由init直接启动呢?

问题3:为什么要专门使用Zygote进程去孵化应用进程,而不是让system_server去孵化呢?

问题4:能具体说说是怎么导致死锁的吗?

问题5:Zygote为什么不采用Binder机制进行IPC通信?

... ...

Android系统启动流程图

大厂永恒敲门砖——Android 系统启动流程详解

下面给大家依次分析一下图中各个层次的含义

Loader层

系统电源以及系统启动

  • 当电源按下,引导芯片代码开始从预定义的地方(固化在ROM)开始执行;加载引导程序到RAM,然后执行

引导程序

  • 引导程序是在Android操作系统开始运行前的一个小程序,是运行的第一个程序,因此它是针对特定的主板与芯片的,可以使用redboot,uboot,qibootloader或者开发自己的引导程序,它不是Android操作系统的一部分,引导程序是OEM厂商或者运营商加锁和限制的地方

引导程序分两个阶段执行:

  • 检测外部的RAM以及加载对第二阶段有用的程序
  • 引导程序设置网络,内存等,这些对于运行内核是必要的,为了达到特殊的目标,引导程序可以根据配置参数或者输入数据设置内核

Kernel层

Kernel层指的就是Android内核层,这里一般开机刚结束进入Android系统,Kerner层的启动流程如下:

  • 启动swapper进程(pid=0),这是系统初始化过程kernel创建的第一个进程,用于初始化进程管理、内存管理、加载Display、Camera、Binder等驱动相关工作
  • 启动kthreadd进程,这是Linux系统的内核进程,会创建内核工作线程kworkder、软中断线程ksoftirqd和thermal等内核守护进程。kthreadd是所有内核进程的鼻祖

Native层

这里的native层主要包括有init进程孵化的用户空间的守护进程,bootanim开机动画和hal层等。init是Linux系统的守护进程,是所有用户空间进程的鼻祖。init进程是Linux系统中用户空间的第一个进程,进程号固定为1

  • init进程会孵化出ueventd、logd、healthd、installd、adbd、lm这里写代码片kd等用户守护进程
  • init进程还会启动ServiceManager(Binder服务管家)、bootanim(开机动画)等重要服务
  • init进程孵化出zygote进程,Zygote进程是Android系统的第一个Java进程(虚拟机进程),zygote进程是所有Java进程的父进程

Framework

  • Zygote进程,是由init进程通过解析init.rc文件后fork生成的,Zygote进程主要包含: - 加载ZygoteInit类,注册Zygote Socket服务端套接字; - 加载虚拟机; - PreloadClasses; - PreloadResouces
  • Zygote进程fork出System Server进程,System Server是Zygote孵化的第一个进程,地位非常重要
  • System Server进程:负责启动和管理整个Java framework,包含ActivityManager,PowerManager等服务。
  • Media Server进程:负责启动和管理整个C++ framework,包含AudioFlinger,Camera Service等服务

App

  • Zygote进程孵化出的第一个App进程是Launcher,这是用户看到的桌面App
  • Zygote进程还会创建Browser,Phone,Email等App进程,每个App至少运行在一个进程上
  • 所有的App进程都是由Zygote进程fork生成的

现如今Android 工程师的竞争环境越来越激烈,但 Andorid 开发仍然是一个刚需的工种,行业对人才的需求从未终止,但与此同时也对我们提出了更高的要求;如果你仍然只是在日常开发过程中复制粘贴,或者仍以完成一个项目需求为唯一目的,已经不能算是合格的工程师了

如果此时你还没有掌握一套主流技术,那么你就必须在最短的时间内迅速掌握住,不然你就会被社会所淘汰,那我们应当如何去学习呢?

经过十个小时的编码排页,可算把腾讯大牛所整理的一张 Android Framework 思维导图及其配套的一份高工学习手册整理成 PDF 文档,需要的小伙伴:可私信发送 "FW 进阶" 即可 免费获取↓↓↓

————私信发送 "FW 进阶" 即可 “领取《腾讯大牛的 Android Framework 思维导图及高工学习手册》”PDF 版

Android Framework 思维导图

大厂永恒敲门砖——Android 系统启动流程详解

手册内容展示如下:

Framework 高工学习手册— Liunx 内存基础篇

大厂永恒敲门砖——Android 系统启动流程详解

Framework 高工学习手册— Binder 源码篇

大厂永恒敲门砖——Android 系统启动流程详解

Framework 高工学习手册—Hander消息机制篇

大厂永恒敲门砖——Android 系统启动流程详解

Framework 高工学习手册—AMS篇

大厂永恒敲门砖——Android 系统启动流程详解

Framework 高工学习手册—PMS篇

大厂永恒敲门砖——Android 系统启动流程详解

Framework 高工学习手册—WMS篇

大厂永恒敲门砖——Android 系统启动流程详解
需要完整版《腾讯大牛的 Android Framework 思维导图及高工学习手册》PDF 文档的小伙伴:可在评论区下方留言,或者私信发送 "FW 进阶" 即可 免费获取↓↓↓

继续阅读