写在前面:这是“简单易懂说原理”系列的第二篇文章。有很多阅读源码的讲解文章,其实很多人是看不进去的,比如我,一堆源码当时能看懂,但是在脑中形成不了图,正所谓记得快忘的也快,所以这次准备利用图表+文字的形式来尝试用简单易懂的方式来讲述下常见功能的背后原理。
这次准备写一些比较底层原理的东西,但是又不想受制于系统版本的限制,基本是一个共通的原理。目前的想法应该会是一个由几篇文章组成的一个系列。写这个系列的初衷是现在无论是热修复还是插件化都太火了,但是不懂底层原理仅会用框架这种,一旦环境有变化,或者原有框架不再维护,成本总是很高的。同时,为了提高自己的职场竞争力,也不能总在纯开发应用的初级工程师层次待着不是。
一、Android系统启动流程
先上图。
整体上大概可以是以上这么几大步骤。其中:
- init进程:是Android系统中用户空间的第一个进程,进程号为1。它是由多个源文件共同组成的,这些文件位于源码目录system/core/init中。
- Zygote进程:是init进程解析init.rc配置文件后启动的。在Android系统中,DVM(Android 5.0前)和ART(Android 5.0开始默认采用)、应用程序进程以及运行系统的关键服务SystemServer进程都是由Zygote进程创建的,我们将它称为“孵化器”。
Z