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://www.rhkb.cn/news/277625.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JAVA】JAVA方法的学习和创造

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​💫个人格言:“没有罗马,那就自己创造罗马~” 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不…

软考高级:软件工程单元测试(驱动模块、被测模块、桩模块)概念和例题

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

手撕算法-最长公共子序列(二)

最长公共子序列(二) 分析:典型的动态规划,直接看代码了。 代码: import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** longest common sub…

【Python】新手入门学习:详细介绍接口分隔原则(ISP)及其作用、代码示例

【Python】新手入门学习:详细介绍接口分隔原则(ISP)及其作用、代码示例 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、Py…

【SpringCloud微服务实战07】Sentinel 服务保护

Sentinel 是阿里巴巴开源的一款微服务流量控制组件。主要作用: 流量控制:避免因瞬间高并发流量而导致服务故障流。超时处理、线程隔离、降级熔断:避免因服务故障引起的雪崩问题。一、Sentinel 安装 1、安装Sentinel控制台,下载jar包并启动:Releases alibaba/Sentinel G…

Day38:安全开发-JavaEE应用SpringBoot框架MyBatis注入Thymeleaf模版注入

目录 SpringBoot-Web应用-路由响应 SpringBoot-数据库应用-Mybatis SpringBoot-模版引擎-Thymeleaf 思维导图 Java知识点 功能:数据库操作,文件操作,序列化数据,身份验证,框架开发,第三方库使用等. 框架…

SpringMVC基础之工作流程

文章目录 SpringMVC 的工作流程1. 总图2. DispatcherServlet3. 必需的配置4. 加载配置文件的两个时机5. 定义控制器6. 创建 JSP 视图 SpringMVC 的工作流程 1. 总图 如上图,Spring MVC 程序的完整执行流程如下: 用户通过浏览器发送请求,请求…

upload-labs通关方式

pass-1 通过弹窗可推断此关卡的语言大概率为js,因此得出两种解决办法 方法一 浏览器禁用js 关闭后就逃出了js的验证就可以正常php文件 上传成功后打开图片链接根据你写的一句话木马执行它,我这里采用phpinfo() 方法二 在控制台…

VLC抓取m3u8视频

前言 最近想看一些网络视频,但是很多时候网页上是m3u8推流的,如果在线看,速度又慢,所以就想下载下来,就想到了VLC的推流,转换能力,查阅资料,加上实践,总结心得。 设置中…

详解MySql索引

目录 一 、概念 二、使用场景 三、索引使用 四、索引存在问题 五、命中索引问题 六、索引执行原理 一 、概念 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。暂时可以理解成C语言的指针,文章后面详解 二、使用场景 数据量较大,且…

【代码随想录】【回溯算法】补day24:组合问题以及组合的优化

回溯算法:递归函数里面嵌套着for循环 给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。 示例: 输入: n 4, k 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 包含组合问题和组合问题的剪枝优化 class solution:def combine(se…

<.Net>VisaulStudio2022下用VB.net实现socket与汇川PLC进行通讯案例(Eazy521)

前言 此前,我写过一个VB.net环境下与西门子PLC通讯案例的博文: VisaulStudio2022下用VB.net实现socket与西门子PLC进行通讯案例(优化版) 最近项目上会用到汇川PLC比较多,正好有个项目有上位机通讯需求,于是…

Notepad++从文件夹查找文本内容

目录 一、背景二、Notepad搜索2.1 测试用例2.2 操作说明 一、背景 在日常的办公、学习或编程中,我们时长会遇到需要在大量文件中搜索特定文本内容的情况: 无论是快速定位某个项目中的代码片段;还是检索文档资料库中的相关信息等。 掌握如何…

2024最新PHP彩虹网盘与外链分享程序,支持所有格式文件的上传

彩虹外链网盘是一款基于PHP的在线存储和分享平台,它允许用户上传各种类型的文件,并提供了生成文件链接、图片链接、音乐和视频链接的功能。同时,它还会自动生成相应的UBB代码和HTML代码,支持文本、图片、音乐和视频的在线预览。这…

ArcGIS分享图层数据的最佳方法

在工作中,经常需要将图层数据分享给其他人。 如下图所示,需要分享的是【CJDCQ】和【GHDLTB】,图层带有符号系统: 一、分享gdb数据库及lyr文件 分享数据自然要找到源数据: 但是,gdb数据是不带符号系统的&a…

pycharm 历史版本下载地址

pycharm 历史版本下载地址 老版本能用就行,不需要搞最新的,当然了,有些小伙伴就是喜欢新的(最先吃螃蟹) 博主就不搞最新了,哈哈 上菜: https://www.jetbrains.com/pycharm/download/other.html…

数据分析-Pandas的直接用Matplotlib绘图

数据分析-Pandas的直接用Matplotlib绘图 数据分析和处理中,难免会遇到各种数据,那么数据呈现怎样的规律呢?不管金融数据,风控数据,营销数据等等,莫不如此。如何通过图示展示数据的规律? 数据表…

开源导出html表格项目-easyHtml

开源导出html表格项目-easyHtml 背景介绍 背景 项目的由来,在面试的过程中,发现这个需求(导出html表格)比较常见,同时也引起我的兴趣,所以就有了开源项目easyHtml第一个版本 介绍 功能 支持自定义表格标…

安装Android Studio遇到Unable to access Android SDK add-on list的错误

第一次安装android studio的时候,提示:unable to access Android sdk add-on list 解决办法 这个错误一般是android studoi代理没有设置导致的,需要在setting里面设置: 点击Android Studio - Preferences,在 Appeara…

肝了三天,完成了AIGC工具网站大全,建议收藏再看

说是肝了三天,其实远远不止,前前后后,从资料搜集到最后整理成文,有近一个月了,大家看在整理不易的份上,给点个赞吧,不要光顾着收藏呀! 国内网站 AIGC 导航 https://www.aigc.cn 网…