Android运行机制(看图说话)

1. 启动流程

所有从init开始…

与大多数的基于Linux系统在启动阶段类似,bootLoader加载Linux内核,然后开始init进程。

Android系统运行库 android系统运行机制_守护进程

init启动Linux守护进程,包括:

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

Android调试桥守护进程(adbd)来管理ADB连接

调试器守护进程(debuggerd)来管理调试进程请求(dump memory等等)

射频接口层守护进程(rild)来管理与射频的通信

Android系统运行库 android系统运行机制_守护进程_02

Init进程启动zygote进程:

一个新生的进程初始化一个Dalvik VM实例

加载类,并监听socket端口用于请求创建VMs实例

Forks请求创建VM实例用于管理进程

写时复制(Copy-on-write)来最大化重用和最小化覆盖

Android系统运行库 android系统运行机制_Android系统运行库_03

init进程启动runtime进程:

初始化Service Manager——上下文管理器用于binder来处理service注册和查询

注册Service Manager作为缺省的上下文管理用于Binder

Android系统运行库 android系统运行机制_Android_04

Runtime进程发送请求给Zygote来启动System Service

Android系统运行库 android系统运行机制_System_05

接着Zygote进程fork一个新的VM实例用于System Service进程,然后启动该service。

Android系统运行库 android系统运行机制_System_06

System Service启动本地系统服务器,包括:

Surface Flinger

Audio Flinger

Android系统运行库 android系统运行机制_Android_07

本地system servers注册Service Manager作为IPC service目标:

Android系统运行库 android系统运行机制_System_08

System Service启动Android管理服务(framework层各种service和manager):

Android系统运行库 android系统运行机制_Android_09

Android管理服务注册到Service Manager中:

Android系统运行库 android系统运行机制_Android系统运行库_10


到此,整个Android系统的启动后:

Android系统运行库 android系统运行机制_Android_11

System Server加载完所有的services后, 系统准备 过程如下…

Android系统运行库 android系统运行机制_Android_12

zygote生产出home的dalvik vm:

Android系统运行库 android系统运行机制_守护进程_13

底层出现libc:

Android系统运行库 android系统运行机制_守护进程_14

zygote逐个生产出dalvik vm:

Android系统运行库 android系统运行机制_System_15


2. 层间交互(Layer Interaction)

主要有如下三种类型的交互:

  • App -> Runtime Service -> lib
  • App -> Runtime Service -> Native Service -> lib
  • App -> Runtime Service -> Native Daemon -> lib

Android Runtime Services:

Android系统运行库 android系统运行机制_System_16

举例:Location Manager

Android系统运行库 android系统运行机制_System_17

Android Native Services:

Android系统运行库 android系统运行机制_Android_18

举例:MediaPlayer

Android系统运行库 android系统运行机制_守护进程_19

增加ALSA?

Android系统运行库 android系统运行机制_System_20

丢弃了kernel driver?

Android系统运行库 android系统运行机制_System_21

Daemon Connection:

native service 被替换为 daemon, binder IPC 被替换为sockets方式,如下:

Android系统运行库 android系统运行机制_Android系统运行库_22

举例:RILD

Telephony Manager

Android系统运行库 android系统运行机制_System_23

(完)