《深入理解Android》:zygote

首先我们要知道是怎么从C/C++跳到JAVA世界里的。首先,zygote是C世界里从init通过fork出来的一个进程,它执行了它的main,而在main里又很重要地执行了AppRuntime的start(),AppRuntime的start()主要:1、启动了虚拟机以;2、注册了JNI环境;3、利用JNI执行了JAVA类ZygoteInit的main。从此进入了JAVA世界。

 

那么ZygoteInit的main是怎样的?1、它建立了一个IPC的socket通信;2、预加载了资源和类;3、再次fork,新进程就是system_server;4、利用之前建立的socket来进行服务——客户通信。

 

接下来就是讲讲system_server。首先,它与父进程zygote共进退,只要system_server不存在,zygote立马就自杀。它有它的使命,首先是先与Binder系统建立通信;第二通过JNI调用SystemServer的main函数。

SystemServer的main函数使用了native函数,但在后面又通过JNI调用了JAVA层的init2函数,它新建了一个进程用来启动ActivityManage等等服务,因此它的地位不容置疑。

 

接下来通过startActivity()演示下上面讲的这些是如何工作的。首先你调用startActivity()之后,那么在system_server进程里的ActivityServicesManage就会通过socket与zygote进行通信,并把参数传递给zygote。zygote获取到参数之后,fork一下病情根据参数进行配置进程,完成之后返回pid给system_server进程。

posted @ 2013-12-12 20:48  yutoulck  阅读(444)  评论(0编辑  收藏  举报