Android 系统的启动过程

Android 系统的启动流程:

  • RomBoot(只读存储器引导程序):这是设备上电时运行的初始软件。RomBoot执行基本的硬件初始化,确保硬件处于可以运行后续启动阶段的状态。这一阶段非常重要,因为它为整个启动过程奠定了基础。
  • SPL(Secondary Program Loader):这是一种小型专用引导程序,负责加载主引导程序(如u-boot)。SPL提供比RomBoot更高级的功能,并为u-boot准备系统环境。它确保系统能够平滑过渡到下一个启动阶段。
  • u-boot(通用引导加载程序):u-boot是嵌入式系统中常用的功能丰富的引导加载程序。它负责加载Linux内核,设置初始硬件环境,并提供各种引导选项和配置。u-boot确保Linux内核在正确的硬件环境中启动,并为后续的系统初始化做好准备。
  • Linux内核启动:一旦u-boot加载了Linux内核,内核就会开始启动。内核启动过程中,它会挂载根文件系统,这是操作系统运行所必需的。文件系统包含了操作系统运行所需的各种程序、库和配置文件。
  • 启动init程序:init程序是Android系统中的第一个用户空间进程,它负责初始化系统服务和设置运行级别。init程序会根据Android系统的初始化脚本(如init.rc)来启动和配置各种系统服务。
  • 启动Zygote进程:Zygote是Android系统中的一个特殊进程,它是所有应用进程的父进程。当Zygote启动时,它会加载并初始化Android运行时环境(如Dalvik或ART虚拟机),并预加载一些常用的类和资源。这样,当后续的应用进程启动时,它们就可以共享这些已经加载的类和资源,从而提高启动速度。
  • 启动SystemServer系统服务:SystemServer是Android系统中的核心服务进程,它负责启动和管理各种系统级的服务,如ActivityManagerService(负责活动管理)、PackageManagerService(负责应用包管理)等。这些服务为应用程序提供必要的系统功能和资源。
  • 启动Launcher:Launcher是Android系统的桌面应用程序,它负责显示设备的主屏幕和应用程序列表。当Launcher启动时,用户就可以开始与设备进行交互了。
  • 启动应用程序:在文件系统挂载、系统服务初始化以及Launcher启动之后,系统就可以开始运行用户空间的应用程序了。这些应用程序可以是预装的,也可以是用户后来安装的。

Framework层的启动流程

在Android系统中是一个复杂且关键的过程,涉及多个组件和服务的启动、初始化以及相互交互。以下是Framework层启动流程的详细概述:

一、Init进程启动

  1. Init进程加载:Init进程是Linux内核启动后的第一个用户空间进程。它负责读取并解析init.rc等初始化脚本,这些脚本定义了系统启动过程中需要执行的各种任务。
  2. 挂载文件系统:Init进程会挂载必要的文件系统,如根文件系统、系统分区等,以确保后续进程能够访问到必要的文件和目录。
  3. 设置安全策略:Init进程还会设置系统的安全策略,如SELinux策略,以确保系统的安全性。

二、Zygote进程启动

  1. 创建Zygote进程:Init进程根据配置脚本创建Zygote进程。Zygote进程是Android系统中所有Java应用的父进程。
  2. 加载Android运行时:Zygote进程会加载Android运行时环境(ART或Dalvik),为后续的Java应用提供运行环境。
  3. 预加载共享资源:为了加快应用启动速度,Zygote进程会预加载一些常用的类和资源,这些资源可以被后续的应用进程共享。

三、SystemServer启动

  1. SystemServer进程创建:Zygote进程孵化出SystemServer进程,它是Android框架层的核心。
  2. 启动系统服务:SystemServer负责启动和管理各种系统级服务,如ActivityManagerService(AMS)、PackageManagerService(PMS)、WindowManagerService(WMS)等。这些服务为应用程序提供了必要的系统功能和资源。

四、服务初始化与交互

  1. 服务初始化:各个系统服务在启动后进行初始化操作,包括加载配置、创建数据结构、注册监听器等。
  2. 服务交互:服务之间会进行交互和协作,以确保系统功能的正常运行。例如,AMS会与WMS交互以管理应用的窗口显示,PMS会与其他服务交互以管理应用的安装和卸载。

五、应用进程管理

  1. 应用进程创建:当有应用需要启动时,AMS会根据请求创建应用进程。这些应用进程由Zygote进程孵化出来,并继承其已加载的Android运行时和共享资源。
  2. 进程管理:AMS负责管理应用进程的生命周期,包括进程的启动、停止、销毁等操作。

Framework层的启动流程在Android系统中涉及多个关键组件和交互。这些组件共同协作,确保系统的正常运行和应用程序的启动。以下是一些主要的组件和它们之间的交互:

主要组件

  1. SystemServer
    • ActivityManagerService (AMS):管理应用程序的生命周期、任务栈和进程。
    • PackageManagerService (PMS):管理应用程序的安装、卸载和权限。
    • WindowManagerService (WMS):管理窗口的创建、布局和输入事件。
    • 其他服务:如电源管理服务、网络管理服务、通知服务等。
  2. Zygote进程
    • 负责加载Android运行时环境(ART或Dalvik)。
    • 作为所有应用进程的父进程,提供共享资源以加速应用启动。
  3. Init进程
    • 负责系统初始化,启动Zygote和SystemServer等关键进程。
    • 挂载文件系统,设置安全策略等。
  4. Binder IPC机制
    • 用于不同进程之间的通信,特别是系统服务和应用进程之间的通信。

主要交互

  1. SystemServer与AMS交互
    • SystemServer启动AMS,AMS管理应用进程的生命周期和状态。
    • 应用进程启动或停止时,AMS会与Zygote交互以创建或销毁进程。
  2. AMS与WMS交互
    • 当应用需要显示窗口时,AMS会与WMS交互以请求窗口的创建和管理。
    • WMS负责窗口的布局、渲染和输入事件处理。
  3. PMS与其他服务交互
    • PMS在应用安装或卸载时更新应用列表和权限信息。
    • 其他服务(如AMS)可以查询PMS以获取应用信息或验证权限。
  4. SystemServer与其他系统服务交互
    • SystemServer作为中心协调者,启动和管理其他系统服务。
    • 这些服务之间通过Binder IPC进行通信和协作。
  5. Zygote与应用进程交互
    • 当AMS请求创建新应用进程时,Zygote会孵化出该进程,并加载必要的类库和资源。
    • 应用进程通过Binder IPC与SystemServer中的服务进行通信。

需要注意的是,Framework层的启动流程是一个复杂且高度交互的过程,涉及多个组件和服务。上述只是其中一些主要的组件和交互,实际上还有许多其他细节和子组件参与其中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2869782.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

提升物流效率,快递平台实战总结与分享

随着电商行业的蓬勃发展,物流配送服务变得愈发重要。快递平台作为连接电商企业和消费者的桥梁,扮演着至关重要的角色。本篇博客将分享快递平台实战经验,总结关键要点,帮助物流从业者提升物流效率、优化服务质量。 ### 快递平台实…

日期与时间(Java)

文章目录 日期与时间(Java)一、JDK8之前的1.1 Date1.2 SimpleDateFormat1.3 Calendar 二、 JDK8之后的2.1 LocalDate、LocalTime和LocalDateTime2.2 ZoneId和ZonedDateTime2.3 Instant2.4 DateTimeFormatter2.4 Period和 Duration 🎉写在最后…

第二十四天-数据可视化Matplotlib

目录 1.介绍 2.使用 1. 安装: 2.创建简单图表 3.图表类型 1.一共分为7类 2.变化 1.折线图 3.分布 ​编辑 1.直方图 2.箱型图 4.关联 1. 散点图: 2.热力图: 5.组成 1.饼图 2.条形图 6.分组 1.簇型散点图 2.分组条形图 3.分…

【人工智能】英文学习材料(每日一句)

#学习笔记# 目录 1.Natural Language Processing,NLP(自然语言处理) 2.Machine Learing,ML(机器学习) 3.Neural Networks(神经网络) 4.Deep Learing(深度学习&#…

基于CNN多阶段图像超分+去噪(超级简单版)

这是之前的一项工作,非常简单,简单的复现了两个算法,然后把它们串起来了。 可执行的程序链接:CSDN; Github 我们分成两部分进行讲解: 1. 图像去噪 1.1 基本思路 图像的去噪工作基于很普通的CNN去噪,效…

前端学习之css选择器--基本选择器、关系选择器、属性选择器、复合选择器、伪类选择器

目录 基本选择器 结果 关系选择器 结果 父子关系 祖先后代关系 相邻兄弟关系 兄弟关系 ​编辑 属性选择器 结果 复合选择器 结果 伪类选择器 结果 伪类选择器-操作标签 结果 未访问 访问后 悬停 基本选择器 <!DOCTYPE html> <html lang"en"…

flowable快速开始

目录 创建用户并分配权限画流程图发布应用程序运行流程文档资料 创建用户并分配权限 创建两个用户 zhangsan和lisi 用于工作流的审批&#xff0c;流程如图 创建用户 分配权限&#xff0c;用于审批工作流 画流程图 点击“创建流程” 开始画图 给人事审批分配 zhangsan…

C++之类和对象(3)

目录 1. 再谈构造函数 1.1 构造函数体赋值 1.2 初始化列表 1.3 explicit 2. static成员 2.1 概念 3. 友元 3.1 友元函数 3.2 友元类 4. 内部类 5. 匿名对象 6. 拷贝对象时编译器做出的优化 1. 再谈构造函数 1.1 构造函数体赋值 class Date { public:Date(int year2024…

Linux第78步_使用原子整型操作来实现“互斥访问”共享资源

使用原子操作来实现“互斥访问”LED灯设备&#xff0c;目的是每次只允许一个应用程序使用LED灯。 1、创建MyAtomicLED目录 输入“cd /home/zgq/linux/Linux_Drivers/回车” 切换到“/home/zgq/linux/Linux_Drivers/”目录 输入“mkdir MyAtomicLED回车”&#xff0c;创建MyA…

Android分区存储到底是怎么回事

文章目录 一、Android存储结构二、什么是分区存储&#xff1f;三、私有目录和公有目录三、存储权限和分区存储有什么关系&#xff1f;四、我们应该该怎么做适配&#xff1f;4.1、利用File进行操作4.2、使用MediaStore操作数据库 一、Android存储结构 Android存储分为内部存储和…

C语言 1000内完数、素数判断

一、一个数如果恰好等于它的因子之和&#xff0c;这个数就称为“完数”。例如&#xff0c;6旳因子为1&#xff0c;2&#xff0c;3&#xff0c;而6123&#xff0c;因此6是“完数”。编程序找出1000以内的所有“完数”&#xff0c;并按照下面格式输出其因子&#xff1a;6 its fac…

java组合模式揭秘:如何构建可扩展的树形结构

组合模式&#xff08;Composite Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许将对象组合成树形结构以表示整体/部分层次结构。组合模式使得客户端可以统一对待单个对象和组合对象&#xff0c;从而使得客户端可以处理更复杂的结构。 组合模式的主要组成部分包括&…

MLP-RF随机森林回归预测(matlab代码)

MLP-RF随机森林回归预测matlab代码 数据为Excel股票预测数据。 数据集划分为训练集、验证集、测试集,比例为8&#xff1a;1&#xff1a;1 模块化结构: 代码将整个流程模块化&#xff0c;使得代码更易于理解和维护。不同功能的代码块被组织成函数或者独立的模块&#xff0c;使…

copilot 很抱歉,目前无法连接到服务。请稍后重试或刷新

一、copilot的优势 微软copilot 在gpt-3基础上又加了很多新功能&#xff0c;输入进行了扩展&#xff0c;包含了语音、图片输入等&#xff0c;输出也更加丰富&#xff0c;包含了信息源、超链接、关键词提取等。最重要的是可以获得最新的消息。这个工具是学习路上的一大利器&…

一起学数据分析_3(模型建立与评估_1)

使用前面清洗好的数据来建立模型。使用自变量数据来预测是否存活&#xff08;因变量&#xff09;&#xff1f; &#xff08;根据问题特征&#xff0c;选择合适的算法&#xff09;算法选择路径&#xff1a; 1.切割训练集与测试集 import pandas as pd import numpy as np impo…

html编辑器

HTML 编辑器推荐 html可以使用记事本编辑 但是更建议使用专业的 HTML 编辑器来编辑 HTML&#xff0c;我在这里给大家推荐几款常用的编辑器&#xff1a; VS Code&#xff1a;https://code.visualstudio.com/WebStorm: https://www.jetbrains.com/webstorm/Notepad: https://no…

Java Web项目—餐饮管理系统Day06-套餐管理(一)

文章目录 1. 需求分析与实体类准备2. 依据菜品分类或者名字进行查询的请求(需求B)3. 新增套餐 1. 需求分析与实体类准备 如上图为新增套餐的界面, 它包含了套餐的一些基本信息, 例如名称、价格等, 同时还有套餐分类(因此这里需要一个查询所有套餐分类的请求处理方法, 需求A). 以…

武汉灰京文化:直播游戏新时代的游戏宣传方式

随着互联网和科技的迅速发展&#xff0c;游戏产业也日益繁荣。传统的游戏宣传方式逐渐显现出一些不足&#xff0c;传统的广告渠道和媒体报道在一定程度上已经不能满足游戏行业的需求。然而&#xff0c;随着直播平台的兴起&#xff0c;直播游戏成为了一种新的游戏宣传方式&#…

【JAVA基础】算法与集合

1 查找 1.1 二分查找 public class Main {public static void main(String[] args) throws IOException, CloneNotSupportedException, ParseException { //数组必须有序int[] arr{1,2,4,5,6,24,123};System.out.println(binarySearch(arr,123));//6}public static int bina…

Python深度学习之路:TensorFlow与PyTorch对比【第140篇—Python实现】

Python深度学习之路&#xff1a;TensorFlow与PyTorch对比 在深度学习领域&#xff0c;TensorFlow和PyTorch是两个备受青睐的框架&#xff0c;它们为开发人员提供了强大的工具来构建和训练神经网络模型。本文将对这两个框架进行对比&#xff0c;探讨它们的优势和劣势&#xff0…