C/S(Client/Server)架构的应用在安卓中随处可见;
ServiceManager在安卓中承担着管理Server的责任;
Client在向Server发起请求之前需要先定位Server;
举个形象的例子,工作中需要发邮件,发邮件之前得先在邮箱列表中找到收件人,才可以准确地进行交互;
Client如何定位的Server?
ServiceManager可类比为"DNS"服务器,该服务器自身的“IP地址为0”;
ServiceManager帮助Client路由到Server;
ServiceManager的是如何启动的?
ServiceManager
http://androidxref.com/9.0.0_r3/xref/system/core/rootdir/init.rc,init.cpp加载init.rc文件时,系统开始加载servicemanager、hwservicemanager、vndservicemanager服务
311on post-fs
312 # Load properties from
313 # /system/build.prop,
314 # /odm/build.prop,
315 # /vendor/build.prop and
316 # /factory/factory.prop
317 load_system_props
318 # start essential services
319 start logd
320 start servicemanager
321 start hwservicemanager
322 start vndservicemanager
http://androidxref.com/9.0.0_r3/xref/frameworks/native/cmds/servicemanager/servicemanager.rc,该文件中声明了servicemanager服务
#当servicemanager重启后,下面的所有服务都跟着重新启动;
#servicemanager在安卓中的重要性,不言而喻
1service servicemanager /system/bin/servicemanager
2 class core animation
3 user system
4 group system readproc
5 critical
6 onrestart restart healthd
7 onrestart restart zygote
8 onrestart restart audioserver
9 onrestart restart media
10 onrestart restart surfaceflinger
11 onrestart restart inputflinger
12 onrestart restart drm
13 onrestart restart cameraserver
14 onrestart restart keystore
15 onrestart restart gatekeeperd
16 writepid /dev/cpuset/system-background/tasks
17 shutdown critical
18