
SystemServer服务和ServiceManager服务分析_站在巨人的肩膀上,温故而知新的博客-CSDN博客_systemservicemanager
SystemServer vs ServiceManager_Eliot_shao的博客-CSDN博客
整体启动流程:
启动用户级别的第一个进程: init 进程。init 进程会解析init.rc 脚 本 做一些初始化工作,包括挂载文件系统、创建工作目录以及启动系统服务进程等,其中系统服务进程包括 Zygote、service manager、media 等 。在 Zygote 中 会 进 一 步 去 启 动 system_ server进 程 , 然 后 在 system_server 进 程 中 会 启 动 AMS、WMS、PMS 等 服 务 ,等 这 些 服 务 启 动 之 后 ,AMS 中 就 会 打 开 Launcher 应 用 的 home Activity, 最 终 就 看 到 了 手 机 的 "桌 面 "。
SystemServer是Android系统的一个核心进程,它是由zygote进程创建的,因此在android的启动过程中位于zygote之后。android的所有服务循环都是建立在 SystemServer之上的。在SystemServer中,将可以看到它建立了android中的大部分服务,并通过ServerManager的add_service方法把这些服务加入到了ServiceManager的svclist中。从而完成ServcieManager对服务的管理。

(1) 服务进程,是android系统的核心服务之一
(2) 系统服务管理:管理系统和应用向系统添加的服务
(3) 查询获取服务:响应client请求并返回相应的服务
Android应用如果想要获取某个系统服务,这个系统服务需要提前添加到ServiceManager中。如果ServiceManager异常退出,系统会重启。如果该服务重启,系统会重启zygote,surfaceflinger,media等服务。
ServiceManager是由init进程通过解析init.rc文件而创建的,其所对应的可执行程序/system/bin/servicemanager,所对应的源文件是service_manager.c。
- 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 是init通过init.rc加载的第一个进程,接下来启动了zygote和media
(1) 系统或Android应用进程发送添加系统服务的请求,通过binder进程间通信到ServiceManager进程处理,然后检查发起请求的进程的权限,再检查该服务是否已经存在,如果存在直接返回;如果不存在,将该服务添加到Service List里。
(2) 获取该服务时也是通过binder进程间通信到ServiceManager进程处理,查询Service List找出该Service,然后返回。
init.rc --> servicemanager --> zygote --> fork的第一个进程 system_server --> 开启AMS/WMS...并注册到servicemanager进程中,向外提供服务。
主要负责系统中 四大组件 的启动、切换、调度及应用程序的管理和调度等工作。