首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

笔记:Zygote和SystemServer进程启动过程

Zygote就是进程init启动起来的。Android中所有应用程序进程,以及运行系统关键服务的System进程都是由Zygote创建的。它通过复制自身的形式创建其它进程。...Zygote在启动时会在内部创建一个虚拟机实例,因此,通过复制Zygote得到的其它应用程序进程和System进程都可以快速地在内部获得一个虚拟机地拷贝。...Zygote启动完成后就立即将System进程启动,以便各种关键服务被启动运行。 Zygote的启动 它以服务的形式被启动。 创建虚拟机 进程内创建一个虚拟机实例,并注册一系列JNI方法。...Zygote.forkSystemServer()复制当前进程来创建子进程。 handleSystemServerProcess()继续处理System进程的启动。...复制自身创建的子进程做为System进程,这样它得到了Zygote的Server Socket,但是用不到,所以第一句closeServerSocket()关闭此套接字。

78780

Android Framework学习(二)之Zygote进程启动解析

Zygote简介 在Android系统中,JavaVM(Java虚拟机)、应用程序进程以及运行系统的关键服务的SystemServer进程都是由Zygote进程来创建的,我们也将它称为孵化器。...zygote进程的启动 zygote进程是在init进程的main函数中进行启动的,zygote是init进程中众多service之一,在init.rc中有启动zygote的相关脚本 system/...注释2处调用注释2处这里调用runtime的start函数来启动zygote进程,并将args传入,这样启动zygote进程后,zygote进程会将SystemServer进程启动。...Zygote的Java层ZygoteInit 通过JNI调用ZygoteInit的main函数后,Zygote便进入了Java框架层,此前没有任何代码进入过Java框架层,换句换说Zygote开创了Java...Zygote进程总结 1.创建AppRuntime并调用其start方法,启动Zygote进程。

31150

Android系统启动流程(二)解析Zygote进程

前言 上一篇文章我们分析了init进程,init进程中主要做了三件事,其中一件就是创建了Zygote进程,那么Zygote进程是什么,它做了哪些事呢?这篇文章会给你这些问题的答案。...关于init启动zygote我们在上一篇文章已经提到了,这里就不赘述了,这篇文章主要分析Android7.0 Zygote的启动流程。...注释2处调用注释2处这里调用runtime的start函数来启动zygote进程,并将args传入,这样启动zygote进程后,zygote进程会将SystemServer进程启动。...3.Zygote的Java框架层 上文我们通过JNI调用ZygoteInit的main函数后,Zygote便进入了Java框架层,此前没有任何代码进入过Java框架层,换句换说Zygote开创了Java...4.Zygote进程总结 Zygote启动流程就讲到这,Zygote进程共做了如下几件事: 1.创建AppRuntime并调用其start方法,启动Zygote进程。

1K80

android进阶之了解Zygote进程的启动及“孵化”

Zygote进程基础介绍 Zygote中文翻译为“受精卵”,正如其名,它主要用于孵化子进程。...Zygote进程最初的名字不是“zygote”而是“app_process”,这个名字是在Android.mk文件中定义的。...如图所示为Zygote孵化框架: Zygote是一个C/S模型,Zygote进程作为服务端,其他进程作为客户端向它发出“孵化”请求,而Zygote接收到这个请求后就“孵化”出一个新的进程。...zygote = true; //说明启动的是Zygote进程 niceName = ZYGOTE_NICE_NAME; //ZYGOTE_NICE_NAME...为true代表的是Zygote进程,也就是说现在正在启动的是Zygote进程, //我们知道Zygote进程用于孵化子进程,Zygote进程孵化子进程是通过自己的资源赋值一份,

65810

Android启动系列之一:init进程和Zygote进程

起初Zygote进程名称并不是“zygote”,而是“app_process”,这个名称在Android.mk中定义的。...${ro.zygote}.rc 可以看到不会引入一个固定文件,而是根据属性ro.zygote来引入不同的文件,主要取值有以下4种: init.zygote32.rc:32位模式 init.zygote32...如果是主辅(32_64或64_32)模式的话,会启动两个Zygote进程,以32_64为例:一个进程为zygote,是主进程,执行程序是app_process32;另外一个进程为zygote_secondary...Zygote启动过程 init启动Zygote时主要调用app_main.cpp的mian函数中的AppRuntime的start方法来启动Zygote进程,这个过程如下: 我们先从app_main.cpp...可以看到首先判断参数arg是否包含“--zygote”,如果包含了则说明是Zygote进程,并且将zygote设置为true。

14810

征服Android面试官路漫漫(四):5 张图带你搞懂Android系统启动的核心流程

由于Zygote进程启动时会创建虚拟机实例,由Zygote fork出的应用程序进程和SystemServer进程则可以在内部获取到一个虚拟机实例副本。...${ro.zygote}.rc ${ro.zygote}的取值有4种,在init.rc的同级目录/system/core/rootdir下,可以看到4个Zygote相关的配置文件,表示系统所支持程序的bit...位数, init.zygote32.rc,Zygote进程的执行程序路径为/system/bin/app_process init.zygote64.rc,Zygote进程的执行程序路径为/system.../bin/app_process64 init.zygote32_64.rc,会启动两个Zygote进程,有两个执行程序,32为主模式 init.zygote64_32.rc,会启动两个Zygote进程..., args, zygote); } } 至此Zygote就正式启动了。

61620

Android Framework学习(五)之应用进程启动流程

我们知道Zygote进程通过fock自身创建的应用程序进程,这样应用程序程序进程就会获得Zygote进程在启动时创建的虚拟机实例。...ABI: " + abi); 之前分析Zygote进程启动过程时,曾说过在Zygote的main函数中会创建name为“zygote”的Server端Socket。...在注释1处会调用ZygoteState的connect函数与名称为ZYGOTE_SOCKET的Socket建立连接,这里ZYGOTE_SOCKET的值为“zygote”。...这两个Socket区别就是:name为”zygote”的Socket是运行在64位Zygote进程中的,而name为“zygote_secondary”的Socket则运行在32位Zygote进程中。...既然应用程序进程是通过Zygote进程fock产生的,当要连接Zygote中的Socket时,也需要保证位数的一致。

58330

当我们按下电源键,Android 究竟做了些什么?

当 ServiceManager 每次重启时,其他关键进程:zygote、media、surfaceflinger 等也会被 restart。...2、Zygote — “孕育”新线程与进程 Android 中大多数应用进程与系统进程都是通过 Zygote 来生成的。...Zygote并不是处于独立的程序中的,它所在程序名为“app_process”,观察 app_process 主函数实现知道,如果 init.rc 中指定了 —zygote选项,app_process...ZygoteInit 流程总结(摘自:Gityuan — Android 系统启动-Zygote 篇): 解析init.zygote.rc中的参数,创建AppRuntime并调用AppRuntime.start...(源码角度:Zygote 内部由 Native 函数 Dalvik_dalvik_system_Zygote_forkSystemServer 来进一步实现,最终调用底层接口的 fork 接口来实际产生进程

1K20
领券