SystemServiceManager – 系统服务管理者
- SystemServiceManager(SSM)是用来管理系统运行所要用到的具体Service的(这些Service都继承于SystemService)。
- SSM由SystemServer创建,可以启动系统级服务并控制SystemService的生命周期
-
三种方式启动系统级服务
//第一种,通过类名启动 public SystemService startService(String className) { ...; serviceClass = (Class<SystemService>)Class.forName(className); ...; return startService(serviceClass); } //第二种,通过serviceClass启动 public <T extends SystemService> T startService(Class<T> serviceClass) { ...; Constructor<T> constructor = serviceClass.getConstructor(Context.class); service = constructor.newInstance(mContext); ...; startService(service); } //第三种,通过SystemService启动 public void startService(@NonNull final SystemService service) { mServices.add(service); //所有系统级服务都存储在mServices链表中,SSM通过管理这个链表来实现对各个SystemService的管理 ...; service.onStart(); ...; }
不难发现前两种启动方式最终都调用了第三种启动方式,service.onStart()中具体有哪些事情详见 SystemService – 所有系统级服务的父类 章节
-
启动检测
-
和用户相关的方法
public void startUser(final int userHandle) {//启动用户 ... final SystemService service = mServices.get(i); service.onStartUser(userHandle); } public void unlockUser(final int userHandle){...} public void switchUser(final int userHandle){...} public void stopUser(final int userHandle) {...} public void cleanupUser(final int userHandle) {...} //这几个方法与startUser类似,都是通过调用SystemService中相应的方法来实现