Android启动过程

来源:互联网 发布:js图片触摸缩放 编辑:程序博客网 时间:2024/06/03 03:39

上一篇分析了Android 的系统架构,让大家对Android系统有了一个深入的认识,但是,android系统本身非常庞大,在深入分析每个具体模块之前,很有必要对Android启动过程进行分析,我们需要了解这么一个庞大的系统在启动时需要执行哪些初始化操作。

Android系统在启动时会先启动linux基础系统,然后引导加载linux Kernel 并启动初始化进程(init),如下框图



                




接着,启动linux守护进程(daemons),(由于守护进程是linux里面先提出的,android是沿用linux的机制,所以这里说是linux的守护进程,但是这时已进入用户空间,属于android的范围)

启动守护进程这个过程主要启动以下内容,

启动USB守护进程(usbd)来管理USB连接。

启动android debug Bridge 守护进程(adbd)来管理ADB连接。

启动Debug守护进程(debuggerd)来管理调试进程的请求(包括内存转换等)。

启动无线接口守护进程(rild)来管理无线通信。

框图如下

                       

                                            

 

 


在启动linux守护进程的同时还需要启动Zygote进程,启动Zygote进程主要是做如下处理:

初始化一个Dalvik虚拟机实例。

装载Socket请求所需的类和监听。

创建虚拟机实例来管理应用程序的进程

  

 

 


再接着,需要初始化runtime进程,这个过程包括如下操作:

初始化服务管理器(Service Manager)。

注册服务管理器,以它作为默认的Binder服务的Context管理器。




Runtime进程初始化之后,runtime将发送一个请求Zygote,开始启动系统服务,这是Zygote将为系统服务进程建立一个虚拟机实例,并启动系统服务,


紧接着,系统服务将启动原生系统服务,主要包括Surface Flinger 和Audio Flinger 。这些本地系统服务将注册到服务管理器(Service Manager)作为IPC服务的目标,







系统服务将启动Android管理服务,Android管理服务(包括Content Manager ,Window Manager Activity Manager等九个管理服务)都将被注册到服务管理器上,




 

最后,当系统加载完所有的服务之后会处于等待状态,等待程序运行。但是,每一个应用程序都将占有一个单独的虚拟机实例,启动一个单独的进程。详见框图:

 

 

到这里,整个系统启动过程就结束了,可以在上面运行应用程序了。你也应该对Android系统启动过程的每一步都有了深入的理解,实际上,这个启动过程就是从Android系统架构图中最底层的linux内核层一步一步加载和注册到应用程序框架层,最终在应用程序层运行我们自己的应用程序的过程。


下一篇  Android 各个层次之间的相互调用关系


 

0 0
原创粉丝点击