android系统启动流程之zygote(Java)启动分析

news/2024/10/21 7:27:32/

Zygote的Java启动分析, 这边需要分清一个概念,zygote进程只有一个,没有区分zygote的java进程或native进程之类的,只是进程运行时调用的代码语言不同,所以涉及C++的native或java层。

Java层的代码分析如下,不算多,但是比较重要:

ZygoteInit.main()://预加载(非常重要):提前加载好一些app需要的资源,这样zygote fork时就不需要再重复初始化处理了,加快进程启动-->preload(bootTimingsTeraceLog); -->预加载一些类,加载的类在/system/etc/preloaded-classes文件中的所有类。-->预加载的一些资源:com.android.internal.R.xx//这个就是Zygote socket,AMS通知zygote启动app就是通过此socket发消息-->zygoteServer = new ZygoteServer(isPrimaryZygote); -->Zygote.createManagedSocketFromInitSocket(); //在构造函数中创建zygoteSocket.Runnable r = forkSystemServer() ; //启动SystemServer进程。caller = zygoteServer.runSelect(abiList);//进入一个死循环。接收AMS传过来的消息。

zygote总结:
native层做了3件事:

  • 初始化运行时环境, 创建 JVM,这就是android的虚拟机,AndroidRuntime ART
  • 注册JNI
  • 调用zygoteinit.main()方法

java层做了以下几件事:

  • 加快进程启动的预加载:加快进程启动
  • socket:让AMS通知我
  • 启动大儿子:SystemServer.
  • 循环等待。

因此,zygote进程的所有的目的是为了生孩子 ,通过zygote启动app,而app是java层代码,它要运行,需要JVM的支持,所以zygote需要先准备好Jvm提前准备好虚拟机,并且app在启动后,可能需要调用访问C++ Native代码,这时需要JNI的支持,所以JNI的注册也放到了zygote进程中,也提前准备好了。当条件满足之后,zygote创建app后,app就能顺利的执行了。并且zygote的preload预加载资源也是出于这些目的,为了让app能够快速的运行,提前预加载了app
所需要的一些java资源,包括系统资源,系统库,classes,RES等,因为这些资源app的java都有可能去调用的。
 


http://www.ppmy.cn/news/1068904.html

相关文章

EXCEL中点击单元格,所在行和列都改变颜色

1、打开VBA编辑环境。 2、选中需要添加程序的Sheet页面。 3、粘贴如下代码在编辑区域并保存后关闭。 Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) On Error Resume Next Cells.FormatConditions.Delete // 如下代码是行变,在粘贴到VBA中时…

【2023】LeetCode HOT 100——普通数组

目录 1. 最大子数组和1.1 C++实现1.2 Python实现1.3 时空分析2. 合并区间2.1 C++实现2.2 Python实现2.3 时空分析3. 轮转数组3.1 C++实现3.2 Python实现3.3 时空分析4. 除自身以外数组的乘积4.1 C++实现4.2 Python实现4.3 时空分析5. 缺失的第一个正数5.1 C++实现5.2 Python实现…

4.9 已建立连接的TCP,收到SYN会发生什么?

1. 客户端的 SYN 报文里的端口号与历史连接不相同 此时服务端会认为是新的连接要建立,于是就会通过三次握手来建立新的连接。 旧连接里处于 Established 状态的服务端最后会怎么样呢? 服务端给客户端发消息了:客户端连接已被关闭&#xff…

Harbor 私有仓库迁移

文章目录 一.私有仓库迁移的介绍1.为何要对Harbor 私有仓库的迁移2.Harbor 私有仓库的迁移特点3. Harbor 私有仓库的迁移注意要点 二.私有仓库迁移配置1.源Harbor配置(192.168.198.11)(1)接着以下操作查看容器状况及是否可以登录 …

2023-08-28 C语言函数一定要在.h文件中声明吗

老林的C语言新课, 想快速入门点此 <C 语言编程核心突破> C语言函数一定要在.h文件中声明吗 前言一、三种情况下的函数声明与定义策略单文件小练习多文件工程需要在多个文件调用的函数不需要跨文件调用的函数 二、示例需要在多个文件调用的函数:不需要跨文件调用的函数: …

算法通关村第十一关——位运算实现加减乘除

在计算机中&#xff0c;位运算的效率比加减乘除效率更高。 1.位运算实现加法 力扣371题&#xff0c; 给你两个整数 a 和 b &#xff0c;不使用 运算符 和-&#xff0c;计算并返回两整数之和。 分析&#xff1a;不让用运算符&#xff0c;就只能使用位运算。先来看一下两位二进…

Apipost: 程序员必备的API管理神器

作为一款专为程序员打造的API管理工具&#xff0c;Apipost也成为开发人员圈子里的一款热门工具。Apipost拥有强大的功能和便捷操作性&#xff0c;这也让许多开发者爱不释手。那么&#xff0c;Apipost到底有哪些吸引人的特点呢&#xff1f;本文将为您详细介绍。 统一API管理 A…

新能源汽车技术的最新进展和未来趋势

文章目录 电池技术的进步智能驾驶与自动驾驶技术充电基础设施建设新能源汽车共享和智能交通未来趋势展望结论 &#x1f389;欢迎来到AIGC人工智能专栏~探索新能源汽车技术的最新进展和未来趋势 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博客…