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

相关文章

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

Android实现悬浮按钮功能

《Android实现悬浮按钮功能》在很多场景中,我们希望在应用或系统任意界面上都能看到一个小的“悬浮按钮”(FloatingButton),用来快速启动工具、展示未读信息或快捷操作,所以本文给大家介绍... 目录一、项目概述二、相关技术知识三、实现思路四、整合代码4.1 Java 代码(MainActivi

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

Java中使用Hutool进行AES加密解密的方法举例

《Java中使用Hutool进行AES加密解密的方法举例》AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个,下面:本文主要介绍Java中使用Hutool进行AES加密解密的相关资料... 目录前言一、Hutool简介与引入1.1 Hutool简介1.2 引入Hutool二、AES加密解密基础

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me