Android 框架研究:(一)框架概要 —— 1.3 启动流程的分析

分析Android Framework有什么好方法呢?回答这一问题之前,先回想一下我们是如何分析他人编写的代码的。

在分析程序代码时,我们通常从程序的入口main()函数开始,一点一点地理清程序流程,把握程序的运行过程。同样,在分析结构庞大的Android Framework时,也要从Android平台启动过程入手。

Android启动过程包含从Linux内核加载到Home应用程序启动的整个过程,依次分析这一过程,有利于我们系统地理解Android Framework运行的原理。

下图简单地描述了Android的启动过程。


1. Linux内核

Android是基于Linux内核的系统平台。启动时,首先通过bootloader(系统加载器),加载Linux内核。在Linux加载启动时,与普通的Linux启动过程相同,先初始化内核,然后调用init进程。

2. init

Android init进程对各种设备进行初始化,运行Android Framework所需用的各种Daemon、Context Manager、Media Manager、Zygote等。

init进程执行的Daemon进程:

  • USB Daemon:管理USB连接。
  • Android Debug Bridge Deamon:ADB连接管理。
  • Debugger Daemon:启动Debugger系统。
  • Radio Interface Layer Daemon:管理无线通信连接。

3. Context Manager

Context Manager是一个管理Android系统服务的重要进程。系统服务是组成Android Framework的重要组件,提供从相机、音频、视频处理到各种应用程序制作所需要的重要的API。

Context Manager提供运行于Android内的各种系统服务信息。应用程序或Framework内部模块在调用系统服务时,需要先向服务管理器申请,而后通过Binder IPC调用系统服务。

在系统启动时,Android所有系统服务都要把各自的handler信息注册到Context Manager。此时,Binder IPC用来进行进程间的通信。

4. Media Server

Media Server用于运行急促C/C++的本地系统服务,如Audio Manager、Camera等。

5. Zygote

Zygote进程用于缩短Android应用程序加载的时间。每当执行Java应用程序时,Zygote就会派生出一个子进程来执行应用程序,该子进程就是用来执行Java应用程序的虚拟机。

6. System Server

System Server是Android系统的一个核心进程,它是由Zygote进程创建的,在Android启动过程中位于Zygote之后。在System Server中可以看到它建立的Android中大部分的服务,如Activity Manager Service、Location Manager Service等。

为了将运行在SystemServer中的Java系统服务提供给Android应用程序或Framework内部模块调用,需要先将它们注册到Context Manager中。

在通过Binder IPC将Java系统服务注册到基于C语言的服务管理器时,需要使用JNI本地编程接口。

       

以上就是对Android启动过程以及Framework初始化的简单介绍。

posted @ 2012-05-25 08:33  andriod2012  阅读(669)  评论(0编辑  收藏  举报