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初始化的简单介绍。