android系统在启动时首先会启动Linux基础系统,然后引导加载LinuxKernel并启动初始化进程。
即:linuxkernel ->Init;
接着,启动Linux守护进程(daemons)。这个过程需要启动以下内容:
1、启动USB守护进程(usbd)来管理USB连接。
2、启动AndroidDebug Bridge 守护进程(adbd)来管理adb连接
3、启动Debug守护进程(debuggered)来管理调试进程的请求(包括内存转换等)
4、启动无线接口守护进程(rild)来管理无线通信。
在启动Linux守护进程的同时,还需要启动Zygote进程,他主要包括以下需要启动和注册的内容:
1、初始化一个Dalvik虚拟机实例
2、装载Socket请求所需的类和监听。
3、创建虚拟机实例来管理应用程序的进程。
再接着,需要初始化runtime进程,需要处理以下操作:
1、初始化服务管理器
2、注册服务管理器,以它作为默认的Binder服务的Context管理器。
runtime进程初始化之后,runtime进程将发送一个请求到Zygote,开始启动系统服务,这时,Zygote将为系统服务进程建立一个虚拟机实例,并启动系统服务。
紧接着,系统服务将启动原生系统服务,主要包括SurfaceFlinger 和Audioflinger.这些本地系统服务将注册到服务管理器(ServiceManager)作为IPC服务的目标。
系统服务将启动Android管理服务,Android管理服务将都注册到服务管理器上。包括ActivityManager、PackageManager等。
最后,当加载完系统服务,等待应用运行,每个应用都在一个独立进程。系统首先启动了一个Home进程和Contacts进程。