Android 启动过程<译>

 一. init启动zygote进程

这一切都始于init
就像大多数类linux系统启动一样,由bootloader加载内核,然后启动init进程。

然后init启动了一些linux的守护进程。其中包括:
•用来管理USB连接的USB守护进程(usbd)
•用来管理Android adb连接的守护进程adbd)
•用来管理调试过程的调试器守护程序(debuggerd)
•用于打电话及相关功能的后台进程 (rild)


之后init进程启动zygote进程:
•一个新生的进程,初始化一个Dalvik虚拟机实例
•加载类并且监听请求(收到请求后生成新的虚拟机实)
•根据请求创建虚拟机实例的托管进程
•用Copy-on-write技术最大限度地复用

二. init启动Service Manager进程
init启动runtime进程
runtime进程初始化ServiceManage-----处理服务注册和查找(用于binder通讯,是android的基石)。

然后Runtime向Zygote进程发送请求以便启动SystemService,如下图:


Zygote接收到请求以后为SystemService 孵化一个新的虚拟机实例并且启动SystemService 。


SystemService然后启动了一些native的系统服务(C++写的系统服务),包括:
Surface Flinger
Audio Flinger



Native 的系统服向Service Manager注册自己以便 IPC通讯:

三. System Service进程启动android的一堆管理服务(对照着android系统结构图来看)
SystemService 启动了一大推 Android 管理服务,如ActivityManager 服务,WallpaperManagerService服务等等。



向Service Manager注册这些服务以便IPC通讯。



当SystemService 启动完一大推 Android 管理服务之后,系统准备好了,后面进入应用阶段:



ActivityService接收到systemready的广播后,找到具有<category android:name="android.intent.category.HOME"/>属性的activity,并启动此activity。
到此为止,系统启动到桌面(launcher)了.

你可能感兴趣的:(Android 启动过程<译>)