Android 进阶解密 - 系统启动

2024-08-21 02:32

本文主要是介绍Android 进阶解密 - 系统启动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Android 进阶解密 - 系统启动

一、init 进程启动过程

init 进程是 Android 系统中用户空间的第一个进程,进程号为1,是 Android 系统启动流程中一个关键的步骤,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建 Zygote (孵化器)和属性服务等。init 进程是由多个源文件共同组成的,这些文件位于源码目录 system/core/init 中。

init 进程启动总结

  1. 创建和挂载启动所需的文件目录。
  2. 初始化和启动属性服务。
  3. 解析 init.rc 配置文件并启动 Zygote 进程。

二、Zygote 进程启动过程

在 Android 系统中,DVMDalvik 虚拟机)和 ART、应用程序进程以及运行系统的关键服务的 SystemServer 进程都是由 Zygote 进程来创建的,我们也将它称为孵化器。 它通过 fock(复制进程)的形式来创建应用程序进程和 SystemServer 进程,由于 Zygote 进程在启动时会创建 DVM 或者 ART,因此通过 fock 而创建的 应用程序进程和 SystemServer 进程可以在内部获取一个 DVM 或者 ART 的实例副本。

我们已经知道 Zygote 进程是在 init 进程启动时创建的,起初 Zygote 进程的名称并不是叫 “Zygote”,而是叫 “app_process”,这个名称在 Android.mk 中定义的,Zygote 进程启动后,Linux 系统下的 pctrl 系统会调用 app_process, 将其名称换成了 “Zygote”

Zygote 进程启动总结

  1. 创建 AppRuntime 并调用其 start 方法,启动 Zygote 进程。
  2. 创建 Java 虚拟机并为 Java 虚拟机注册 JNI 方法。
  3. 通过 JNI 调用 ZygoteInitmain 函数进入 Zygote 的 Java 框架层。
  4. 通过 registerZygoteSocket 方法创建服务器端 Socket,并通过 runSelectLoop 方法等待 AMS 的请求来创建新的应用程序进程。
  5. 启动 SystemServer 进程。

三、SystemServer 处理过程

SystemServer 进程主要用于创建系统服务,我们熟知的 AMS、WMS 和 PMS 都是由它来创建的,因此掌握 SystemServer 进程是如何启动的,它在启动时做了哪些工作是十分必要的。

SystemServer 进程启动总结

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

  1. 启动 Binder 线程池,这样就可以与其他进程进行通信。
  2. 创建 SystemServerManager,其用于对系统的服务进行创建、启动和生命周期管理。
  3. 启动各种系统服务。(引导服务、核心服务和其他服务)
    引导服务:AMS、PMS等等

四、Android 系统启动流程总结

1、SystemServer 进程启动总结

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

2、引导程序 BootLoader

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

3、Linux 内核启动

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

4、init 进程启动

初始化和启动属性服务,并且启动 Zygote 进程。

5、Zygote 进程启动

创建 Java 虚拟机并为 Java 虚拟机注册 JNI 方法,创建服务器端 Socket,启动 SystemServer 进程。

6、SystemServer 进程启动

启动 Binder 线程池和 SystemServerManager,并且启动各种系统服务。

7、Launcher 启动

被 SystemServer 进程启动的 AMS 会启动 Launcher,Launcher 启动后会将已安装应用程序的快捷图标显示到界面上。

这篇关于Android 进阶解密 - 系统启动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1091865

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

[MySQL表的增删改查-进阶]

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 💻💻💻数据库约束 🔭🔭🔭约束类型 not null: 指示某列不能存储 NULL 值unique: 保证某列的每行必须有唯一的值default: 规定没有给列赋值时的默认值.primary key:

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

从0到1,AI我来了- (7)AI应用-ComfyUI-II(进阶)

上篇comfyUI 入门 ,了解了TA是个啥,这篇,我们通过ComfyUI 及其相关Lora 模型,生成一些更惊艳的图片。这篇主要了解这些内容:         1、哪里获取模型?         2、实践如何画一个美女?         3、附录:               1)相关SD(稳定扩散模型的组成部分)               2)模型放置目录(重要)