android核心血制之Zygote启动流程

android核心机制之Zygote启动流程1.先说一下android中的服务,一种是系统服务,系统服务通过getSystemServic

android核心机制之Zygote启动流程

1.先说一下android中的服务,一种是系统服务,系统服务通过getSystemService方法获得,所有的系统服务运行在一个进程中.

?

2.还有一种是自定义Service,也就是通过startService启动. 这种服务是单独一个进程.

?

Zygote实际上是一个进程繁殖器,通过socket的select模型进行繁殖.类似命令的方式来进行Fork.

下面绘制了其流程图.

?

可以看到:

启动完ServiceManager后,启动Zygote和SystemServer进程。

1.Zygote服务实际上是一种Select服务模型.

2.为了启动java代码,进行了一次androidRuntime的打开和关闭.

3.启动的SystemServer进程,此进程启动了一个线程注册了很多服务之后,开启了手机的HOME(也就是桌面),然后开始服务循环.(注意:此服务是Binder服务,Binder服务一启动就是俩线程。可能是因为是两个CPU吧。

代码如下:

4.Zygote进入select循环系统,开始服务.

5.此服务是很简单的,而且是通用的服务代码。(也就是取数据,传输数据,与SOCKET有些类似)。上层必须基于此服务原型来写相应的代码。

?

?


android核心血制之Zygote启动流程