Android系统的启动流程简介

Android系统的启动流程简介

            • 开启电源
            • 启动Linux内核
            • 启动init进程
            • 启动Zygote进程
            • 启动SystemServer进程
            • 启动Launcher应用程序(桌面)

此篇文章简要介绍android系统的启动流程。即从按下电源到启动系统桌面的过程。目的是让大家对android系统的启动过程有个简单的认识。

开启电源

说起android系统的启动,第一步肯定是开启电源。
那开启电源后发生了什么事呢?
开启电源后,首先引导芯片代码从预定义的地方(ROM)开始执行,将BootLoader引导程序加载到RAM中,然后执行引导程序。此处引导程序的作用就是拉起来并运行Linux内核。

启动Linux内核

当linux内核启动时会完成一些系统设置,比如设置缓存、加载驱动等。然后就会启动系统的第一个进程,即init进程。

启动init进程

init进程是系统的第一个进程。它在启动的过程中做了很多的事情。比如:
1、创建和挂载了启动所需的文件目录。这些文件目录只有在系统运行的过程中才存在。当系统停止运行后,这些文件目录会被移除。

2、初始化和启动了属性服务。此处的属性服务类似于window的注册表。用来记录一些用户和软件的使用信息,以便于在系统或软件重启后进行一些相应的初始化工作。

3、启动了Zygote进程(进程孵化器)

启动Zygote进程

从上一步中我们知道在init进程中启动了Zygote进程。Zygote进程也被称为进程孵化器。因为后续系统的进程都是通过fock它来创建的。
而在Zygote进程的启动过程中也做了很多的事情,如下:
1、创建了Java虚拟机并为java虚拟机注册了JNI方法。此处之所以需要注册JNI是因为需要调用java框架层的Zygote方法。而此前我们的代码逻辑都是在native中。
2、创建了一个Server端的socket。用来监听AMS的请求。即等待AMS请求创建新的应用程序进程。(实现位于java框架层的Zygote代码中)
3、启动了SystemServer进程。(实现位于java框架层的Zygote代码中)

启动SystemServer进程

上面刚刚说过后续系统的进程都会通过fock Zygote进程来创建。SystemServer进程正是如此创建。
从上面的内容中我们可以知道Zygote在java框架层中启动了SystemServer进程。
而SystemServer进程又做了哪些事呢。
首先SystemServer在native中启动了Binder线程池,用于与其他的进程进行通信。
其次通过创建SystemServiceManager,使用SystemServiceManager间接启动了其他的系统服务。系统服务主要分为三种类型:引导服务、核心服务、其他服务。

部分系统服务如下:

引导服务 作用
Installer 系统安装apk时的一个服务类,启动完成Installer服务之后才能启动其他的系统服务
ActivityManagerService 负责四大组件的启动、切换、调度
PowerManagerService 计算系统中和power相关的计算,并决策系统应该如何反应
LightsService 管理和显示背光LED
DisplayManagerService 用来管理所有显示设备
UserManagerService 多用户模式管理
SensorService 为系统提供各种传感器服务
PackageManagerService 用来对apk进行安装、解析、删除、卸载等操作
核心服务 作用
DropBoxManagerService 用来生成和管理系统运行时的一些日志文件
BatteryService 管理电池相关的服务
UsageStatsService 收集用户使用每个app的频率及时长
WebViewUpdateService WebView更新服务
其他服务 作用
CameraService 摄像头相关服务
AlarmManagerService 全局定时器管理服务
WindowManagerService 窗口管理服务
NotificationManagerService 通知管理服务
LocationManagerService 定位管理服务
启动Launcher应用程序(桌面)

上面说过SystemServer进程在启动过程中会启动其他的系统服务,其中就包括PackageManagerService服务。而PackageManagerService服务在启动后会将系统中的应用程序(预置应用)安装完成。这里就包括了Launcher应用程序。这时候在此前已经启动的ActivityManagerService服务就会将Launcher应用程序启动起来。

以上就是从按下电源到启动系统桌面(Launcher)的过程。

你可能感兴趣的:(Android,android)