Android系统历程Zygote启动进程的源代码剖析,正在Android系统中,所有的利用法式历程和系统办事历程SystemServer都是由Zygote历程孕育(fork)出来的,那或许就是为何要把它称为Zygote(受精卵)的缘由吧。果为Zygote历程正在Android系统中有着如斯主要的职位,本文将具体剖析它的启动进程。
接下来的socket闭头字透露表现那个zygote历程需要一个名称为zygote的socket资本,如许,系统启动后,我们便可以正在/dev/socket目次下看到有一个名为zygote的文件。那里界说的socket的类型为unixdomainsocket,它是用来作当地历程间通讯誉的,详细可以参考前里一篇文章Android进修启动篇提到的一书《Linux内核源代码景象剖析》的第七章--基于socket的历程间通讯。前里我们说到的ActivityManagerService就是通那个socket来和zygote历程通讯哀求fork一个Android系统历程Zygote启动进程的源代码剖析利用法式历程的了。
下里我们就具体剖析每个步调。
正在前里一篇文章Android利用法式历程启动进程的源代码剖析中,我们看到了,当ActivityManagerService启动一个利用法式的时间,就会经过Socket与Zygote历程停止通讯,哀求它for源代码k一个子历程出来作为那个行将要启动的利用法式的历程;正在前里两篇文章Android利用法式安拆进程源代码剖析和Android系统默许Home利用法式(Launcher)的启动进程源代码剖析中,我们又看到了,系统中的两个主要办事PackageManagerService和ActivityManagerService,都是由SystemServer历程来负责启动的,而SystemServer历程自己是Zygote历程正在启动的进程中fork出来的。
领会了那个信息以后,我们就知道Zygote历程要履行的法式即是system/bin/app_process了,它的源代码位于frameworks/base/cmds/app_process/app_main.cpp文件中,进心函数是main。正在继续剖析Zygote历程启动的进程之前,我们先来看看它的启动序列图:
正在Android系统中,所有的利用法式历程和系统办事历程SystemServer都是由Zygote历程孕育(fork)出来的,那或许就是为何要把它称为Zygote(受精卵)的缘由吧。果为Zygote历程正在Android系统中有着如斯主要的职位,本文将具体剖析它的启动进程。
闭于init.rc文件的更多信息,请参考system/core/init/readme.txt文件。
最后的一系列onrestart闭头字透露表现那个zygote历程重启时需要履行的号令。
我们知道,Android系统是基于Linux内核的,而正在Linux系统中,所有的历程都是init历程的子孙历程,也就是说,所有的历程都是直接或间接地由init历程fork出来的。Zygote历程也不破例,它是正在系统启动的进程,由init历程建立的。正在系统启动剧本system/core/rootdir/init.rc文件中,我们可以看到启动Zygote历程的剧本号令:
前里的闭头字service报告init历程建立一个名为zygote的历程,那个zygote历程要履行的法式是/system/bin/app_process,后里是要传给app_process的参数。
|
QQ空间代码 使用方法: 一、登录你的QQ空间; P.S.“QQ空间特区”每天都有精彩奉献给你! |