当前位置: 首页 > news >正文

Android Framework框架与启动过程初识一

文章目录

  • Android系统框架
  • init
    • 配置文件
    • 关键功能
  • zygote
    • 作用
    • 面试相关

Android系统框架

  1. 框架图
    在这里插入图片描述

  2. Framework分层图
    红色圈中的部分就是Framework部分
    在这里插入图片描述

  3. 启动流程
    在这里插入图片描述

init

init是用户空间的鼻祖

  1. init 进程初始化:init 进程会进行一系列初始化操作,像挂载文件系统、设置系统属性、解析并执行初始化脚本等。
  2. 启动关键服务:init 进程会依据配置文件来启动系统的关键服务,例如 Zygote 进程、SurfaceFlinger 、MediaServer等。这些服务是安卓系统正常运行的基础。

配置文件

init 进程主要通过解析配置文件来确定要执行的操作和启动的服务。在安卓系统中,常见的配置文件有:

  • init.rc:这是最主要的初始化脚本,它定义了系统启动时需要执行的命令和启动的服务。该文件采用了特定的语法来描述服务、动作和属性。
  • init..rc:这是针对特定设备的初始化脚本,用于处理该设备特有的初始化需求。
  • init..rc:这是针对特定主板的初始化脚本,处理主板相关的初始化工作。

关键功能

  • 挂载文件系统:init 进程会挂载根文件系统以及其他必要的文件系统,像 /system、/data 等。
  • 设置系统属性:它会设置一系列系统属性,这些属性可用于控制系统的行为和配置。例如,ro.build.version.sdk 属性表示当前系统的 SDK 版本。
  • 启动服务:init 进程会依据配置文件启动各种系统服务,这些服务包括:
  • Zygote 进程:负责预加载 Java 虚拟机(JVM)和系统资源,为后续创建应用程序进程提供基础。
  • SurfaceFlinger:负责管理和合成系统的图形界面,确保界面的流畅显示。
  • MediaServer:提供媒体播放和录制的服务。
  • 处理信号和事件:init 进程会监听并处理各种信号和事件,比如系统关机、重启等。当接收到相应的信号时,它会执行相应的操作来保证系统的正常关闭或重启。

zygote

zygote是由init进程fork出来的,在Android中,DVM和ART、应用程序进程以及运行系统的关键服务的SyetemService进程都是由Zygote进程来创建的,所以称之为孵化器。
Zygote 进程是 Android 系统中由 init 进程启动的第一个 Java 进程,它运行着一个 Java 虚拟机(JVM)实例,并且预加载了大量的系统资源和类,能够快速创建新的应用程序进程和部分系统服务进程。

  • 加载虚拟机:Zygote 进程启动后,会加载 Dalvik 虚拟机(早期 Android 版本)或者 Android Runtime(ART,从 Android 5.0 开始)。
  • 预加载资源和类:Zygote 会预加载系统资源(如系统类库、字体、图片等)和常用的 Java 类(会有上万个类),这样在创建新进程时可以避免重复加载,提高进程创建的速度。
  • 监听 Socket:Zygote 进程会创建一个 Socket 并监听特定的端口,等待来自系统服务(如 ActivityManagerService–AMS)的请求,以创建新的应用程序进程。
  • SystemServer进程 由 Zygote 创建, SystemServer会创建service, SystemServer 启动的服务可能超过 100 个。
    在这里插入图片描述

作用

  • 提高进程创建速度:由于 Zygote 预加载了系统资源和类,新进程可以通过复制 Zygote 进程快速创建,避免了每次创建进程时都要重新加载这些资源,大大缩短了应用程序的启动时间。
  • 节省内存:多个应用程序进程可以共享 Zygote 进程中预加载的资源,减少了内存的重复占用,提高了系统的内存使用效率。
  • 保证系统稳定性:Zygote 进程作为一个独立的进程,负责管理 Java 虚拟机和系统资源的加载,降低了应用程序进程对系统的影响,提高了系统的稳定性和可靠性。
    在这里插入图片描述

面试相关

为什么app从zygote fork而不是从init fork(预加载后fork的进程可以共享)。
怎么优化zygote加快启动速度(比如加载的类有上万个,可以异步并发加载)。
作者:帅得不敢出门

相关文章:

  • uniapp如何获取安卓原生的Intent对象
  • 分布式-redisson
  • 关于 live555延迟优化之缓存区优化“StreamParser::afterGettingBytes() warning: read”” 的解决方法
  • PLC与工业电脑:有什么区别?
  • 精益数据分析(35/26):SaaS商业模式关键指标解析
  • AI生成Flutter UI代码实践(一)
  • 【MongoDB篇】MongoDB的文档操作!
  • 运维打铁: 存储方案全解析
  • 【MongoDB篇】MongoDB的索引操作!
  • 文章记单词 | 第52篇(六级)
  • day11 python超参数调整
  • 32单片机——串口
  • C++初阶-string类1
  • Hadoop虚拟机中配置hosts
  • 微信小程序 XSS 防护知识整理
  • 上海车展,世界模型 + VLA,城区智驾进入下半场
  • 同时启动俩个tomcat压缩版
  • spring--事务详解
  • react-10样式模块化(./index.module.css, <div className={welcome.title}>Welcome</div>)
  • 神经网络用于地震数据时空均匀插值的方法与开源资料
  • 特朗普加征关税冲击波:美国零售、汽车、航空、科技企业纷纷预警业绩波动
  • 徐徕任上海浦东新区副区长,此前已任区委常委
  • 日本希望再次租借大熊猫,外交部:双方就相关合作保持密切沟通
  • 第二艘国产大型邮轮实现坞内起浮,重点强化邮轮供应链本土化建设
  • 国务院任免国家工作人员:饶权任国家文物局局长
  • 人社部:我国劳动力市场潜力足,韧性强