* startBootstrapServices(); // 启动引导服务
* startCoreServices(); // 启动核心服务
* startOtherServices(); // 启动其他服务
SystemServer 进程启动系统服务方式
SystemServer 进程启动系统服务有两种方式,分别是 SystemServiceManager 的startService
方式和 ServiceManager 的 addService
方式。
ServiceManager.addService("scheduling_policy", new SchedulingPolicyService());
Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
mSystemServiceManager.startService(TelecomLoaderService.class);
startService 方式
通过 SystemServiceManager 的startService(Class<T> serviceClass)
用于启动继承于SystemService
抽象类的服务。
主要功能如下:
- 通过反射创建对应的 SystemService ,并调用其
onStart
方法。 - 同时将创建是 SystemService 添加到 SystemServiceManager 的
mService
集合变量中。
addService 方式
通过 ServiceManager 的addService(String name, IBinder service)
用于初始化继承于 IBinder 的服务。
主要功能如下:
- 将对应服务的 Binder 对象添加到 SystemManager 中去。
之前有学习到 ServiceManager 是系统服务的管家,通过它来获得其他服务。然而,在启动系统服务时,有些服务竟然没有 addService 注册到 ServiceManager 中去。
事实上,有些服务即使在启动时没有注册进去,在启动之后也会注册到 ServiceManager 中去。