本文原创作者:Cloud Chou. 欢迎转载,请注明出处和本文链接
service manager是所有binder service的管理者,但它并不是这些binder service的创建者。
这些binder service有些是init进程启动的服务创建的,有些是system_server进程创建的,但是service manager会管理所有binder service的信息,方便client查询以及调用。
service manager是由init进程直接启动的,在init.rc里有
1
2
3
4
5
6
7
8
9
service servicemanager /system/bin/servicemanager
class core
user system
group system
critical
onrestart restart zygote
onrestart restart media
onrestart restart surfaceflinger
onrestart restart drm
ActivityManagerService,PackageManagerService等由system_server进程启动的binder service实际上并没有单独的进程,它们只是system_server的一个子线程。init进程会启动surface flinger,media server, drmserver等服务,在这些服务里会创建binder service,并注册到service manager。
init.rc声明了surfaceflinger:
1
2
3
4
5
service surfaceflinger /system/bin/surfaceflinger
class main
user system
group graphics drmrpc
\t\tonrestart restart zygote
native binder service 和 java 层的binder service,都会交由service manager注册,然后由service manager管理。客户端使用binder service时需要向service manager查询得到binder service在当前进程的一个代理,通过代理与binder service的服务端交互。