1、概述
service_manager是Android中IPC机制的关键组件。负责提供注册服务和查询获取服务功能。
一旦service_manager挂了,其它服务需要重启。如healthd、zygote、media、surfaceFlinger等进程都需要重启。
2、作用
作为操作系统的定位器存在。任何一个应用或系统组件想要使用其它服务,都需要先到service_manager中查询,获取对应服务的句柄。即service_manager提供注册服务和查询服务功能。
3、原理
注册服务流程:
- 服务调用Java(android.os.ServiceManager)或者C++(defaultServiceManager)获取到service_manager句柄,然后调用addService()方法,进而会调用ADD_SERVICE_TRANSACTION()函数。
- ADD_SERVICE_TRANSACTION()函数会通过binder发送给service manager。
- service manager收到消息后,会分配一个新的svcinfo结构体,然后把消息中服务名、服务引用填写到结构体中。
- 新分配的svcinfo结构体被加入到svclist链表中。
获取服务流程:
- 客户端调用getService()方法(通常通过Context.getSystemService()方法),进而会调用到GET_SERVICE_TRANSACTION()函数。
- GET_SERVICE_TRANSACTION()函数会通过binder发送给service manager。
- service manager收到消息后,遍历svclist链表,寻找其中有无与指定的名称相匹配的项,如果有,则把该服务的引用返回给调用者。