Android系统启动流程分析(一)

版权声明:如需转载请注明出处 https://blog.csdn.net/zhonglunshun/article/details/78605666

因为篇幅比较长,所以分几篇讲解,希望童鞋们会有耐心看完,讲解过程中我尽量少贴代码多写注释,毕竟,贴代码多了头晕得很;我刚学习的时候也是一篇一篇博客筛选,很是麻烦,后来发现一般代码少的,带图的,注释多的一般是好文章,我也会尽量按照这个标准来写博客,还有一点就是因为我的水平有限,我会尽量按照我的理解来说的很清晰,因此有些因为自身理解问题导致错误的,望大家发现问题后批评指正,共同进步;

首先我们来看下Android系统的框架,这张图网上找的,看起来很清晰;
这里写图片描述

有朋友说4.4以后使用art替代了dalvik,想要了解更多可以参考这篇博客《Android 中的Dalvik和ART是什么,有啥区别》

  • Linux内核:我们可以把Android系统当做linux的一个发行版,不过Android系统内核在传统linux内核上做了相当一部分改进;有兴趣的朋友可以看下这篇文章:简析Android对Linux内核的改动
  • AndroidRuntime:处于Linux内核层以及应用框架层中间,而Java的运行环境依赖于Java虚拟机,所以AndroidRuntime对于android系统非常重要。Init进程是Linux环境下非常重要的一个进程,而Zygote进程是Java环境下的第一个进程,所有其他的Java环境下的进程都是由Zygote进程来进行fork的,而init进程在启动Zygote进程之后,初始化Zygote进程之前,会先进行AndroidRuntime的启动和环境建立;通过运行环境加载运行库,不知道我这么理解对不对;
  • Framework: 说简单点,Framework具体的工作也就是为android应用开发的开发人员提供了一系列的服务和API的接口。至于Framework是怎么启动的,加载了什么东西,在后面的文章我会以SystemUI为例详细解说。
  • Application这个就是运行在上面的一系列Apk应用程序了,比如打电话,浏览器,日历,Launcher等一个个应用程序;
    以上便是整个Android系统框架的简要说明;

接下来,我们了解一下系统是怎么启动的,在此之前,我们先看一张图;
这里有一个从按下电源键开机到系统启动的流程图,相信看了之后大家大致了解了整个系统的启动流程:
这里写图片描述
这里还有一片外文文章也是将启动过程的,很形象,有兴趣的可以戳进去

如果还是不太懂,我讲的更详细一点,一般开机过程大致可以分为三个大阶段:
1. OS级别,由bootloader载入linux kernel后,kernel开始初始化, 并载入built-in的驱动程序。Kernel完成开机后,载入init process,切换至user-space后,结束kernel 的循序过程(sequence),进入排程模式(process scheduling)。
2. Android-level,由init process 开始,读取init.rc,Native服务启动,并启动重要的外部程序,例如:servicemanager、Zygote以及System Server。
3. Zygote-Mode,Zygote启动完System Server后,进入Zygote Mode,在Socket 等候命令。随后,使用者将看到一个桌面环境(Home Screen)。桌面环境由一个名为Launcher的应用程序负责提供。
这里写图片描述
注:Zygote主要负责启动System server和执行android程序(APK)。成功启动System server后会使用socket方式监听(monitorandroid apps/prcesses)

上面只是一个大体的介绍,接下来我们详细了解下从电源键按下到系统启动完成中间经历了什么;

猜你喜欢

转载自blog.csdn.net/zhonglunshun/article/details/78605666