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 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android系统启动流程总结概要 -> 正文阅读

[移动开发]Android系统启动流程总结概要

1、启动电源以及系统启动

当电惊按下时引导芯片代码从预定义的地方(固化在 ROM )开始执行。加载引导程序
BootLoader RAM ,然后执行。

2、引导程序 Bootloader

引导程序 BootLoader 是在 Android 操作系统开始运行前的 个小程序,它的主要作
用是把系统 OS 拉起来并运行。

3、Linux 内核启动

  当内核启动 ,设置缓存、被保护存储器、计划列表、加载驱动。当内核完成系统设
置时,它首先在系统文件中寻找 init.rc 文件,并启动 init 进程。

4、init 进程启动

  init 程启动做了很多的工作,总的来说主要做了以下几件事:
	(1)  创建和挂载启动所的文件目 录。
	(2)初始化和启动属性服务。
	(3)解析 init.rc 配置文件并启动 Zygote 进程。
	(4)解析 init.rc 配置文件并启动ServiceManager进程。

5、ServiceManager启动流程:

	(1)打开binder驱动,并调用mmap()方法分配128k的内存映射空间:binder_open()。
	(2)通知binder驱动使其成为守护进程:binder_become_context_manager();
	(3)验证selinux权限,判断进程是否有权注册或查看指定服务;
	(4)进入循环状态,等待Client端的请求:binder_loop()。
	(5)注册服务的过程,根据服务名称,但同一个服务已注册,重新注册前会先移除之前的注册信息。
	(6)死亡通知: 当binder所在进程死亡后,会调用binder_release方法,然后调用
	binder_node_release这个过程便会发出死亡通知的回调.

	ServiceManager最核心的两个功能为查询和注册服务:
		注册服务:记录服务名和handle信息,保存到svclist列表;
		查询服务:根据服务名查询相应的的handle信息。		

6、Zygote 进程启动

  Zygote 进程启动共做了如下几件事
	(1)创建 AppRuntime 并调用其 start 方挂,启动 Zygote 进程。
	(2)创建 Java 虚拟机并为 Java 虚拟机注册 JNI 方法
	(3)通过刑 周用 Zygotelnit main 函数进入 Zygote Java 框架层。
	(4)通过 registerZygoteSocket方怯创建服务器端 Socket ,并通过 runSelectLoop方怯
	等AMS的请求来创建新的应用程序进程。
	(5)启动 SystemServer 进程。

7、SystemServer 进程被创建后,主要做了如下工作:

	(1)启动 Binder 线程池,这样就可以与其他进程进行通信
	(2)创建 SystemServiceManager ,其用于对系统的服务进行创建、启动和生命周期管理。
	(3)启动各种系统服务。(系统服务分为了三种类型,分别是引导服务、核心服务和其他
		服务,其中其他服务是一些非紧要和不需要立即启动的服务,PMS、AMS属于核心服务)

8、Launcher 启动

   SystemServer 进程在启动的过程中会启动PackageManagerService,PackageManagerService
   启动后会将系统中的应用程序安装完成。在此前已经启动的AMS会将Launcher启动起来。
   SystemServer 进程启动的AMS会启动Launcher, Launcher 启动后会将己安装应用的快捷图标
   显示到界面上。

如下是系统启动的流程
在这里插入图片描述

这篇文章都是看《Android进阶解密》做的笔记

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-07-27 16:20:36  更:2021-07-27 16:21:17 
 
开发: 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年5日历 -2024/5/5 1:52:26-

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