Android 框架相关知识概述。

# Android 启动过程

Android 启动时,首先通过 bootloader (系统加载器) 加载 Linux 内核。Linux 加载启动时,先初始化内核,再调用 init 进程。

# init 进程

init 进程会运行 Android Framework 所需的 Daemon, Context Manager, Media Server, Zygote 等。

# Daemon

以下是 init 进程执行的 Daemon 进程。

1
2
3
4
#          USB Daemon (usbd): 管理 USB 连接。
# Android Debug Bridge Daemon (adbd): Android Debug Brige 连接管理。
# Debugger Daemon (debuggerd): 启动 Debugger 系统。
# Radio Interface Layer Daemon (rild): 管理无线通信连接。

# Context Manager

Context Manager 是一个管理 Android 系统服务的重要进程,系统服务提供从相机,音频,视频处理到各种应用程序制作所需要的 API。
Context Manager 还提供用于 Android 内的各种系统服务信息。应用程序或 Frameword 内部模块在调用系统服务时,需要先向服务管理器申请,再通过 Binder IPC 调用系统服务。
系统启动时,Android 所有系统服务都要把各自的 handle 注册到 Context Manager。

# Media Server

Media Server 用于运行基于 C/C++ 的本地系统服务,如 Audio Flinger,Camera 等。

# Zygote

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

# System Server

Syetem Server 是 Android 系统的一个核心进程,它有 Zygote 创建,所以启动过程位于 Zygote 之后。在 System Server 中可以看到它建立的 Android 中的大部分服务,为了将运行在 System Server 中的 java 系统服务提供给 Android 程序或 Framework 内部模块调用,需要先将它们注册到 Context Manager 中。