首页 > 系统相关 >Zygote 进程你不知道的东西

Zygote 进程你不知道的东西

时间:2024-07-28 11:54:53浏览次数:22  
标签:启动 东西 Zygote init 进程 Android SystemServer

一、概述

1.Zygote(孵化) 进程是所有 Android进程的父进程,包括SystemServer和各种应用进程都是通过Zygote进程fork出来的。Zygote进程相当于Android系统的根进程,系统启动后所有的进程都是通过这个进程fork出来的。这样做的好处是:每个新应用进程都可以从Zygote进程继承已经初始化好的虚拟机环境、共享虚拟机内存、框架层资源和系统资源(包括内存空间中的代码、数据和其他资源),从而加快应用启动速度。

2.虽然 Zygote 进程相当于 Android系统的根进程,但事实上它也是由 Linux系统的init进程(进程号为1)启动的。Init进程在解析init.rc脚本时,会启动Zygote进程。

3.Zygote进程的优先级被设置为最高,以确保快速准备好系统环境。若Zygote进程异常退出,init进程会将其重新启动。

4.在 ART 时代,Zygote 会预先进行 AOT(Ahead of Time)编译,将热点代码转换为机器码,减少应用程序运行时的开销。

5.Zygote进程运行在一个沙箱环境中。

6.各个进程启动的先后顺序:

  Linux系统的init 进程 --> Android系统的Zygote 进程 --> Android系统的SystemServer 进程 --> Android系统中要启动的各种应用进程


二、各进程的作用

1.init进程:Linux的根进程,Android系统是基于Linux系统的,因此可以算作是整个Android操作系统的第一个进程。

2.Zygote 进程:Android 系统的根进程,主要作用: fork 出Android系统的SystemServer 进程和各种应用进程。

3.SystemService 进 程 : 主 要 是 在 这 个 进 程 中 启 动 系 统的各项服务,比如ActivityManagerService,PackageManagerService,WindowManagerService等服务。

4.各种应用进程:启动自己编写的应用时,一般都是重新启动一个应用进程,有自己的虚拟机与运行环境。


三、Zygote 进程解析

1.源码位置
    frameworks/base/core/java/com/Android/internal/os/ZygoteInit.java
    

2.Zygote进程的main方法

Zygote 进程 main 方法主要执行以下逻辑:

1)  创建并启动ART虚拟机实例。初始化 DDMS。

2)  注册 Zygote 进程的 socket 通讯。

3)  初始化 Zygote 中的各种类,资源文件,OpenGL,类库,Text 资源等。

4)  初始化完成之后 fork 出 SystemServer(名称为system_server) 进程。

5)  fork 出 SystemServer 进程之后,关闭 socket 连接。进入等待状态,准备接收来自SystemServer或AMS(Activity Manager Service)的请求以创建新应用进程。

3.ZygoteInit  类的 main  方法

1) init 进程在启动 Zygote 进程时一般都会调用 ZygoteInit 类的 main 方法。

2)调用enableDdms(),设置DDMS可用,可以发现DDMS启动的时机还是比较早的,在整个 Zygote 进程刚刚开始要启动的时候就进行初始化可用。

3) 之后初始化各种参数。

4) 通过调用 registerZygoteSocket 方法,为 Zygote 进程注册 Socket。

5) 然后调用 preload 方法实现预加载各种资源。

6) 然后调用 startSystemServer 开启 SystemServer 服务。
 


微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!

标签:启动,东西,Zygote,init,进程,Android,SystemServer
From: https://blog.csdn.net/cxsjabcabc/article/details/140748753

相关文章

  • 可靠地获取当前进程的TargetData
    在llvmlite中,需要TargetData的实例来获取对象的ABI大小。这是有道理的,因为对象的大小取决于字的大小和对齐方式。如果我想立即编译并使用当前进程中的代码,那么除了当前进程的目标数据之外,我不需要任何其他东西。文档似乎表明这将可靠地获取当前进程的目标数据。import......
  • java学习进程4
    在这一周的学习中,我主要集中在Java编程的基础知识及其核心概念的理解上。以下是我本周所做的一些具体活动:本周学习活动面向对象编程(OOP)基本概念:本周我深入学习了面向对象编程的基本概念,了解了类、对象、属性和方法的定义及其在Java中的应用。同时也理解了对象如何通过......
  • Linux系统编程——进程
    学习目标:学习内容:1.进程的含义?进程是一个程序执行的过程,会去分配内存资源,cpu的调度pcb  是一个结构体,process control block print circuit boardvim -ttask_struct PID,进程标识符当前工作路径   chdirumask  0002进程打开的文件列表  文件IO中......
  • 你觉得很好用的东西和道理,也许别人并不喜欢,所以还不如学会等价交换
    在日常生活中,我们常常怀着一颗助人的心,希望能够帮助他人改善生活或解决问题。然而,有时候过度的介入可能并不是最好的帮助方式。本文将探讨如何平衡助人的愿望与尊重他人命运的重要性。助人情节的反思助人情节可能源自于善良和同情,但有时也可能带来反效果:过度介入:过度的帮......
  • 谷歌浏览器的渲染进程
    浏览器是一个多进程多线程的,类似于操作系统的。浏览器的进程模型决定了如何管理和分隔浏览器的各个组件,以提供更好的性能、安全性和稳定性。主要的进程模型包括单进程模型、多进程模型和混合进程模型。1.单进程模型在单进程模型中,浏览器的所有组件(包括用户界面、渲染引擎、插......
  • 软考-软件设计师(2)-操作系统概述:多级索引、PV操作、段页式存储、磁盘管理、进程管理
    场景软考-软件设计师-操作系统概述模块高频考点整理。以下为高频考点、知识点汇总,不代表该模块所有知识点覆盖,请以官方教程提纲为准。注:博客:霸道流氓气质-CSDN博客实现知识点文件系统多级索引求文件系统多级索引的最大长度二级索引=一级索引*一级索引*大小某文件系统......
  • 进程和线程的区别到底有哪些,一文带你彻底搞清楚
    进程和线程是现代操作系统中资源管理和任务执行的基本单位。在Linux系统中,进程和线程有着各自的特性和应用场景。理解它们之间的区别,有助于优化应用程序的设计和性能。本文将深入探讨进程和线程的区别,并重点分析它们在Linux系统中的实现和应用。......
  • 第三章 进程线程模型
    第三章进程线程模型进程1、并发环境与多道程序设计(1)程序的顺序执行程序:指令或者语句序列;体现了某种算法;所以程序是顺序的特点:顺序性;封闭性;程序执行结果的确定性;程序结果的可再现性(2)多道程序设计定义:计算机能够同时处理多个具有独立功能的程序;以增强系统的处理能力和提高机......
  • Python 多进程下日志打印
    Python多进程下日志打印问题分析使用gunicorn启动Flask时,如果直接使用logging的RotatingFileHandler模块会出现日志混乱,甚至日志丢失的情况。在日志翻转时,可能出现一个进程将log文件翻转,而后又有进程也将log文件翻转,导致log.1文件并未达到设置的最大的文件大小,......
  • Linux工作原理8深入了解进程和资源利用率
    8深入了解进程和资源利用率本章将带你深入了解进程、内核和系统资源之间的关系。有三种基本的硬件资源:CPU、内存和I/O。进程会争夺这些资源,而内核的工作就是公平地分配资源。内核本身也是一种资源--进程用来执行创建新进程和与其他进程通信等任务的软件资源。本章中的许多工......