Android系统的启动流程简介


此篇文章简要介绍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的频率及时长
WebViewUpdateServiceWebView更新服务
其他服务作用
CameraService摄像头相关服务
AlarmManagerService全局定时器管理服务
WindowManagerService窗口管理服务
NotificationManagerService通知管理服务
LocationManagerService定位管理服务
启动Launcher应用程序(桌面)

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

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

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值