1 Android是基于Linux内核的系统平台。启动时,首先通过bootloader(系统加载器),加载linux内核。在linux内核加载启动时,与普通的Linux启动过程相似,然后调用用户空间中的init进程。init进程对各种设备进行初始化,运行Android Framework所需的各种Daemon、Content Manager、Media Server 、Zygote等。
2 init进程启动Linux守护进程Daemon,具体如下:
--USB Daemon(usbd):管理usb连接
-- Android Debug Bridge Daemon(adbd):管理ADB连接。
-- Debugger Daemon:管理调试进程的请求。
--Radioi Interface Layer Daemon(rild):管理无线通信
在启动Linux守护进程的同时还需要启动Zygote进程,主要包括以下工作:
--初始化一个Dalvik虚拟机实例
--装载socket请求所需的类和监听
--创建虚拟机实例来管理应用程序的进程。
接着,需要初始化runtime进程,主要包括如下工作:
--初始化服务管理器
--注册服务管理器,以它作为默认Binder服务的Context管理器。
runtime初始化之后,runtime进程将发送一个请求到zygote,开始启动系统服务,这时zygote将为系统服务进程建立一个虚拟机实例,并启动系统服务。
系统服务具体由媒体服务器(Media Server)与系统服务器(System Server)俩个系统进
程运行。
媒体服务器进程用来启动除Surface Flinger之外的Audio Flinger、Media Player Service等本地系统服务。
系统服务器是由Zygote最初生成的基于java进程,它会启动所有Java系统服务,还包括本地系统服务Surface Flinger,如下图所示:
3 当所有Java系统服务加载完毕后,Activity Manger Service 会运行Home应用,启动过程继续进行。