IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 安卓系统启动流程 -> 正文阅读

[游戏开发]安卓系统启动流程

安卓系统主要启动流程如下:

  1. 启动电源以及系统启动
  2. 引导程序 BootLoader
  3. Linux 内核启动
  4. init 进程启动
  5. Zygote 进程启动
  6. SystemServer 进程启动
  7. Launcher 启动

一、init 进程启动过程

init 过程启动过程中主要做了以下三件事:

  1. 创建和挂在启动所需的目录文件
  2. 初始化和启动属性服务:属性服务采用键值对的形式记录用户、软件的一些使用信息,使得系统或者软件重启之后可以根据注册表中的记录进行相应的初始化工作。
  3. 解析 init.rc 配置文件并启动 Zygote 进程(调用 Zygote 的 main 函数)

二、Zygote 进程启动过程

Zygote 进程被称为安卓系统的孵化器,Zygote 进程在启动时会创建 DVM(Dalvik虚拟机)和 ART(Android Runtime),后续其他的应用程序进程和 SystemService 进程都有 Zygote 进程通过 fork (复制进程)的方式创建。(因此应用程序进程和 SystemService 进程可以在内部获得一个 DVM 和 ART 副本)。

Zygote 进程的启动过程主要做了以下几件事:

  1. 创建 AppRuntime 并调用其 start 方法,启动 Zygote 进程:main 函数中通过 init 进程调用时携带的参数判断出此时是在启动 Zygote 进程,因此调用 start 方法
  2. 创建 Java 虚拟机并为其注册 JNI 方法:在 AppRuntime 的 start 方法中调用
  3. 通过 JNI 调用 ZygoteInit 的 main 函数进入 Zygote 的 Java 框架层:在 AppRuntime 的 start 方法中调用
  4. 通过调用 ZygoteServer 的 registerServerSocket 方法创建服务端 Socket:在 ZygoteInit 的 main 方法中调用
  5. 启动 SystemServer 进程:在 ZygoteInit 的 main 方法中调用 startSystemServer 方法完成创建和启动
  6. 通过调用 ZygoteServer 的 runSelectLoop 方法等待 AMS 的请求来创建新的应用程序进程:在 ZygoteInit 的 main 方法中调用,runSelectLoop 方法是一个死循环

三、SystemServer 启动过程

由上文可知 ZygoteInit 的 main 方法调用 startSystemServer 方法,startSystemServer 方法首先复制 Zygote 进程创建 SystemServer 进程,接着关闭掉对 SystemServer 进程没有用处的 Socket 服务,最后调用 handleSystemServerProcess 方法启动 SystemServer 进程。

handleSystemServerProcess 方法主要做了以下几件事:

  1. 启动 Binder 线程池,获得与其他进程通信的能力:通过 ZygoteInit 类中的 zygoteInit 方法调用 native 方法完成启动
  2. 创建 SystemServerManager,用于对系统的服务进行创建、启动和生命周期管理
  3. 通过 SystemServerManager 启动各种系统服务

SystemServerManager 会依次启动以下三种服务:

  • startBootstrapServices(启动引导服务):ActivityManagerServer 、PackageManagerServer等
  • startCoreServices(启动核心服务):BatteryServer 、UsageStateServer(手机用户每一个App使用频率和时长)等
  • startOtherServices(启动其他服务):CameraServer 、WindowManagerServer等

四、Launcher 进程启动过程

在 SystemServerManager 调用 startOtherServices 启动其他服务时,通过 AMS 的 systemReady 方法启动 Launcher 进程

参考书籍:《Android 进阶解密》

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 00:25:36  更:2022-04-01 00:28:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:07:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码