Android 系统启动

Android的启动流程作为整个Android系统的开端,这部分的流程时刻影响着应用层的方方面面。这些知识也是作为Android开发进阶必须要了解的一部分。

系统架构图.png

因此,本文通过流程图来探索一下Android的启动过程。

启动流程
  1. Android设备上电后,首先会从处理器片上ROM的启动引导代码开始执行,片上ROM会寻找Bootloader代码,并加载到内存。(这一步由“芯片厂商”负责设计和实现)
  2. Bootloader开始执行,首先负责完成硬件的初始化,然后找到Linux内核代码,并加载到内存。(这一步由“设备厂商”负责设计和实现)
  3. Linux内核开始启动,设置缓存、被保护存储器、计划列表,加载驱动。当内核完成系统设置,它首先在系统文件中寻找”init”文件,然后启动root进程或者系统的第一个进程--init程序。
  4. init进程启动:初始化和启动属性服务,并且启动Zygote进程
    init程序最核心的工作主要有3点:
  • 创建和挂载一些系统目录/设备节点,设置权限,如:/dev, /proc, and /sys
  • 解析 init.rc 和 init..rc,并启动属性服务,以及一系列的服务和进程。
  • 显示boot logo,默认是“Android”字样
  1. Zygote进程启动:创建java虚拟机并为java虚拟机注册JNI方法,创建服务器端Socket,启动SystemServer进程。
  2. SystemServer进程启动: 启动Binder线程池和SystemServiceManager,并且启动各种系统服务。
  3. Launcher启动:被SystemServer进程启动的AMS会启动Launcher,Launcher启动后会将已安装应用的快捷图标显示到界面上。

init进程

init进程是Android系统中用户控件的第一个进程,进程号是1。

  • 创建和挂载启动所需的文件目录:
    这是init进程启动开始的第一步,其中挂载了tmpfs、devpts、proc、sysfs和selinuxfs共5种文件系统,这些都是系统运行时目录,顾名思义,只在系统运行时才会存在,系统停止时会消失。
  • 初始化和启动属性服务
  • 解析init.rc配置文件并启动Zygote进程

Zygote

1.创建了一个Server端的Socket
2.预加载类和资源
3.启动了SystemServer进程
4.等待AMS请求创建新的应用程序进程

SystemServer

1.启动Binder线程池
2.创建了SystemServiceManager(用于对系统服务进行创建、启动和生命周期管理)
3.启动了各种服务

服务

服务包含2部分,一部分是本地服务,另一部分是Android服务,所有的这些服务都会向ServiceManager进程注册,由它统一管理,这些服务的启动过程介绍如下:

本地服务

本地服务是指运行在C++层的系统守护进程,一部分本地服务是init进程直接启动的,它们定义在init.rc脚本和init..rc中,如 ueventd、servicemanager、debuggerd、rild、mediaserver等。还有一部分本地服务,是由这些本地服务进一步创建的,如mediaserver服务会启动AudioFlinger, MediaPlayerService 等本地服务。

Android服务

Android服务是指运行在Dalvik虚拟机进程中的服务,这些服务的创建过程描述如下:
init进程会执行app_process程序,创建Zygote进程,它是Android系统最重要的进程,所有后续的Android应用程序都是由它fork出来的。
Zygote进程会首先fork出"SystemServer"进程,"SystemServer"进程的全部任务就是将所有的Android核心服务启动起来,这些服务包括:


image.png

当所有的服务都启动完毕后,SystemServer会打印出“Making services ready”,然后通过ActivityManager启动Home界面,并发送“ACTION_BOOT_COMPLETED”广播消息。

注意,这些Android服务并没有各种运行在独立的进程中,它们由SystemServer以线程的方式创建,所以都运行在同一个进程中,即SystemServer进程中。

参考链接:
https://blog.51cto.com/ticktick/1659473
https://www.jianshu.com/p/2c1318b0f527
https://blog.csdn.net/shaoenxiao/article/details/87088982

你可能感兴趣的:(Android 系统启动)