今天要解决的一个疑问是 如果我启动一个系统不存在的服务,系统是怎么知道这个服务不存在的,它又是如何处理的 。
1
ActivityManagerService.startService 方法调用了ActiveServices#startServiceLocked 方法, 然后后者调用 retrieveServiceLocked 方法 ,然后最终到PackageManagerService 的 getServiceInfo()方法里面的 :
ParsedService s = mComponentResolver.getService(component);
2
那我们就看 ComponentResolver.getService(component) 方法:
ComponentResolver.getService 实际是调用了 ServiceIntentResolver 的方法 。
class ServiceIntentResolver 的功能 :
存储了系统所有的service ,方便后面查询解析。
在系统启动的时候会将所有service 放入ServiceIntentResolver 中 。
由于系统没有这个服务,ComponentResolver.getService(component) 方法就返回空 。