Andriod系统架构之 系统启动流程简析

Android 系统启动流程图

在这里插入图片描述

init 进程

“init 进程” 是 Android系统中用户空间的第一个进程。“init 进程” 是Linux内核启动后,在用户空间启动的“系统级别”的进程。之后所有的新进程,不管是系统进程,还是用户进程都是由该进程Fock出来并启动的。源码位于 system/core/init 中。

“init 进程” 的主要作用为 Fork 并启动 “Zygote” 进程和 “ServiceManager”进程。

“ServiceManager” 进程 会启动 Binder服务管理器,用来管理所有binder 。使得 AMS、WMS、PMS等系统服务可以进行注册和获取。注册后便可以获取使用 “Binder” 进行跨进程通信。SystemService进程 和 AMS通信 或 其他进程。

Binder 是把 运行在用户空间的 Client 、Service、ServiceManager 和 运行在内核空间的 Binder 驱动程序 连接起来,实现跨进程通信。 Binder 驱动程序是核心, ServiceManager提供了辅助管理的功能(open、ioctl操作,管理和提供查询service接口), Client 、Service是在它们两个基础上的通信方,是我们自己需要实现的。


Zygote 进程

zygote 的源码位于 system/core/ rootdir 中; zygote 是通过Fork自身来创建子进程的。子进程拥有父进程的所有资源。
在这里插入图片描述

zygote 作用:

  1. 初始化 共享库、资源库、预置类库等。
  2. 创建JVM虚拟机示例。
  3. 注册 JNI ,准备调用Java 层 Main函数
  4. 预加载资源。
  5. 创建 Socket 服务端,用来进行 socket 跨进程通信的。AMS 与 Zygote 进程通信。
  6. 创建并启动 SystemService 系统服务进程。

SystemService 系统服务

SystemService 会初始化系统所需的所有服务和资源。
在这里插入图片描述

  1. 启动Binder线程池。
  2. 创建主线程 MainLooper。
  3. 创建系统 Context 上下文。
  4. 创建 SystemServiceManger 对象, 负责系统 Service 的启动。
  5. 启动其他服务。
  6. 最后启动 looper。

启动其他服务
该过程会分为三个步骤完成:

startBootstrapService()
名称服务
Activity管理服务ActivityManagerService
电源管理服务PowerManagerService
灯光服务LightsService
显示服务DisplayManagerService
包管理服务PackageManagerService
用户服务UserManagerService
传感器服务SensorService
startCoreService()
名称服务
统计电池电量服务BatteryService
使用统计服务UsageStatsService
webView 服务WebViewUpdateService
startOthreSevice() 该方法中启动的服务比较多,只列举个别服务:
名称服务
电信加载服务TelecomLoaderService
相机服务CameraService
闹铃服务AlarmManagerService
输入服务InputManagerService
window管理服务WindowManagerService 并传递给 AMS
UI管理服务UiModeManagerService
网络管理服务NetworkManagementService 、NetworkScoreService 、NetworkStatsService 、NetworkPolicyManagerService
通知服务NotificationManager
音频服务AudioService
桌面服务LauncherAppsService

而 AMS 会启动 Launcher 桌面,至此,系统已完整启动显示出来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值