Zygote 进程你不知道的东西

一、概述

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等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

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

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

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

相关文章

【python】sklearn基础教程及示例

【python】sklearn基础教程及示例 Scikit-learn(简称sklearn)是一个非常流行的Python机器学习库,提供了许多常用的机器学习算法和工具。以下是一个基础教程的概述: 1. 安装scikit-learn 首先,确保你已经安装了Python和…

Python:模块导入

step1. 创建一个.py文件,里面装载你想导入的内容 step2. 用import导入 import导入的两种方法 1.整体 import file_name 2.局部 from file_name import function_name 整体的调用: file_name.function() 局部的: function_name() 这是导入的文…

Unity 资源 之 Pop It 3D 解压玩具与双人AI游戏 Unity 资源包分享

精彩呈现:Pop It 3D 解压玩具与双人AI游戏 Unity 资源包分享 一、Pop It 3D 解压玩具的魅力二、双人游戏的互动乐趣三、Unity 游戏资源包的优势四、如何获取资源包 亲爱的游戏爱好者们,今天为大家带来一款令人兴奋的游戏资源——Pop It 3D 解压玩具双人带…

Linux安装Python并运行一个项目

Linux安装Python并运行一个项目 1、下载Python Python版本:3.10.11 操作系统:Centos 8.2 下载地址:https://www.python.org/ftp/python/3.10.11/Python-3.10.11.tar.xz 将文件放在:/opt/python 下 2、安装Python 先安装一些…

数字陷波器的设计和仿真(Matlab+C)

目录 一、数字陷波器的模型 二、Matlab仿真 1. 示例1 2. 示例2 三、C语言仿真 1. 由系统函数计算差分方程 2. 示例代码 一、数字陷波器的模型 二、Matlab仿真 1. 示例1 clear clc f0=100;%滤掉的100Hz fs=1000;%大于两倍的信号最高频率 r=0.9; w0=2*pi*f0/fs;%转换到…

[图解]《分析模式》漫谈19-Midjourney、Sora

1 00:00:02,360 --> 00:00:03,360 今天的漫谈 2 00:00:03,370 --> 00:00:04,560 我们来说一下 3 00:00:04,570 --> 00:00:08,720 人工智能,还是前言 4 00:00:08,890 --> 00:00:11,840 这里有一句话 Kent Beck 5 00:00:12,630 --> 00:00:13,750 W…

Spring Boot配置文件的语法规则

主要介绍两种配置文件的语法和格式,properties和yml 目录 1.配置文件的作用 2.创建配置文件 3.properties语法 4.yml语法 5.配置文件格式 1.配置文件的作用 对于配置文件,也有独立的文件夹去存放,主要用来存放一些需要经过变动的数据&a…

Vue学习(二)计算属性、监视属性、样式绑定

计算属性 定义:如果一个要用的数据,而是由已有的属性(data中的属性)计算得来,那么可以将其作为计算属性 原理:底层借助了Object.defineproperty方法提供的getter和setter。 计算属性都放在vue实例中的co…

达梦脱机备份报错[-7170]:bakres连接DMAP失败

达梦脱机备份报错[-7170]:bakres连接DMAP失败 [dmdbatest1 ~]$ DmServiceDMSVR01 stop Stopping DmServiceDMSVR01: [ OK ] [dmdbatest1 ~]$ [dmdbatest1 ~]$ dmrman dmrman V8 RMAN> backup database /dm8/data/DM01/dm.ini full; backu…

python绘制方波信号

python绘制方波信号 1、效果 2、导入库 pip install numpy pip install matplotlib3、实现代码 # -*- coding: utf-8 -*-""" @contact: 微信 1257309054 @file: test.py @time: 2024/7/28 14:48 @author: LDC """ import numpy as np import …

IOS-04 Swift 中数组、集合、字典、区间、元组和可选类型

在 Swift 编程语言中,数据结构和类型的合理运用对于高效编程至关重要。接下来,我们将深入探讨数组、集合、字典、区间、元组和可选类型的相关知识。 一、数组(Array) (一)元素定义 可以通过多种方式定义数…

Hello 算法:动画图解、一键运行的数据结构与算法教程

Hello 算法 《Hello 算法》是一份开源、免费的数据结构与算法入门教程,特别适合新手。全书采用动画图解,内容清晰易懂,学习曲线平滑,引导初学者探索数据结构与算法的知识地图。源代码可以一键运行,帮助读者通过练习提…

C#中的同步编程和异步编程

1. 简单描述一下同步编程和异步编程 同步编程:按照代码的顺序一行一行执行,如果某个操作需要等待(比如读取文件、网络请求、数据库操作等),那么当前的线程就会停下来,一直到这个操作完成了之后&#xff0c…

洛谷P1064金明的预算方案题解

题目传送门 思路 购买附件是一定要购买主件,并且附件最多有两个,所以一个主件搭配附件的方法只有四种(选第一个,选第二个,都选,不选)。所以我们在dp时只考虑主件,枚举这四种方案。…

git学习(一)

一、代码仓库的初始化 1、先在本地操作,不涉及到远程服务器,创建目录mkdir git demo 想要本地创建的目录成为一个远程仓库就需要初始化git init git init 后会发生什么? 2、watch -n 1 -d tind每隔1s打印当前文件目录并且刷新 左边命令 wa…

搞DDR,你是可以看看我的这篇笔记(三)

关于DDR PHY这个部分,是数模混合器件,工作涉及到了很多信号完整性,眼图,模拟等相关的东西我就没讲了。因为确实不太熟悉,只能站在架构、功能、使用上去聊聊。 上一篇我们看了这个图片,简化就是下面这个样子: 其实这个也不太合适~~~ 这样舒服多了,一般DDRC和DDRPHTY都会…

基于机器学习的股票预测及股票推荐系统的设计与实现

基于机器学习的股票预测及股票推荐系统的设计与实现 Design and Implementation of a Machine Learning-based Stock Prediction and Stock Recommendation System 完整下载链接:基于机器学习的股票预测及股票推荐系统的设计与实现 文章目录 基于机器学习的股票预测及股票推荐…

被工信部认可的开源软件治理解决方案

近日,工信部网络安全产业发展中心正式发布了“2023年信息技术应用创新解决方案”,开源网安凭借“基于SCA技术开源软件治理解决方案”顺利入选,成为经工信部认可的优秀解决方案,这是开源网安连续两届荣获此荣誉。 工业和信息化部网…

17.延迟队列

介绍 延迟队列,队列内部是有序的,延迟队列中的元素是希望在指定时间到了以后或之前取出和处理。 死信队列中,消息TTL过期的情况其实就是延迟队列。 使用场景 1.订单在十分钟内未支付则自动取消。 2.新创建的店铺,如果十天内没…

【Redis系列】RedisTemplate的使用与注意事项

目录 一.什么是RedisTemplate 二.如何使用RedisTemplate RedisTemplate的API 序列化 三.StringRedisTemplate 一.什么是RedisTemplate RedisTemplate 是一个工具类,由 Spring 官方提供的方便操作 Redis 数据库的一个工具类,来源于 org.springframe…