Service Manager:
由init 进程启动。Service Manager和zygote进程奠定了Android的基础。所以从启动顺序上来看,Service Manager和zygote是一个级别的,
都是由init启动, 而System Server是由zygote进程fork出来的。init 进程通过创建子进程启动这些服务,创建的 service 都属于 native 服务,运行在 Linux 空间。
service servicemanager /system/bin/servicemanager
class core
user system
group system
critical
onrestart restart healthd
onrestart restart zygote
onrestart restart media
onrestart restart surfaceflinger
onrestart restart drm
servicemanager:启动 Binder IPC,管理所有的 Android 系统服务。ServiceManager是一个守护进程,负责管理Server并向Client提供查询Server的功能。
内部维护一个list来记录已经注册的所有的service,统一管理,向Client提供查询服务。
System Server:
Init进程启动zygote后, 由zygote启动的第一个java应用,System Server会启动Android的核心服务,如:ActivityManager, WindowManager, PackageManager,etc.
SystemServer通过ServiceManager.addService()调用,使用Binder IPC把上面那些核心服务注册到ServiceManager负责维护的Server列表。
service zygote /system/bin/app_process -Xzygote /system/bin –zygote –start-system-server
class main
socket zygote stream 660 root system
onrestart write /sys/android_power/request_state wake
onrestart write /sys/power/state on
onrestart restart media
onrestart restart netd
zygote通过fork 并启动 System Server 核心进程。上面脚本的含义为作为孵化进程 (-Xzygote 参数),通过 system/bin/app_process 启动zygote 服务,同时启动
SystemServer(–start-system-server 参数)进程。
System Server 进程的主要功能:
1)加载 android servers 底层函数库
2)启动 android 系统中的 native 服务
3)创建、注册并启动 Android 的系统服务,在独立线程中运行
4)创建 Looper 消息循环,处理 System Server 进程中的事件消息
System Server 创建 Android 系统服务对象,通过Binder注册到 Service Manager 进程。启动过程中最核心的一步是“启动 Android 系统的各种系统服务”,这
些系统服务构成了整个 Android frameworks的基础,通过 Binder IPC 为上层应用提供各种功能。