android启动过程是探索android的第一步,尤其是令java初学者感到疑惑的是,"where is the main function?".ok,we will explore how it works in this chapter.
本文主要摘抄了csdn的一篇文章,简单记录系统的启动流程.核心内容出处:
http://blog.csdn.net/caowenbin/article/details/6110751
“Android的启动过程可以分为两个阶段,第一阶段是Linux的启动,第二阶段才是Android的启动,下面我们分别来了解一下具体的过程。
首先是Linux启动,这一部分我想就可以略过了,无非是Linux的Bootloader,Kernel,Driver之类的,在这里唯一要提到的就是ServiceManager,即服务管理器,这个是做为一个进程在Android加载之前就被启动了,我们可以从init.rc中看到这个配置项:service servicemanager /system/bin/service manager,ServiceManager是Binder的服务管理守护进程,是Binder的核心,由其使用Binder驱动进行IPC管理,关于IPC通讯的机制,此处不再详述。在APP和Framework中,应用程序使用的ServiceManager.java就是通过Proxy与这个守护进程进行的通讯。”
Android 之 ServiceManager与服务管理:http://blog.csdn.net/xieqibao/article/details/6585143
ServiceMananger是android中比较重要的一个进程,它是在init进程启动之后启动,从名字上就可以看出来它是用来管理系统中的service。比如:InputMethodService、ActivityManagerService等。
借用两张图来说明问题:
从这里可以看出,linux的init在启动若干守护进程之后,就启动了Android的runtime和zygote,zygote再启动虚拟机,系统服务,系统服务再启动完本地服务后,又启动了若干Android服务,并完成向ServiceManager的注册工作,最后系统启动完成。系统的进程空间如下图所示:可见,由zygote孵化器为各进程以写时复制的方式用最小的代价实现了虚拟机。