在开发过程中,常常会用到系统服务,有时候也会添加一些系统服务;
这里看一下Android P相关源码;
在APP层获取系统服务的接口是getSystemService;
它被定义在frameworks/base/core/java/android/content/Context.java
public abstract @Nullable Object getSystemService(@ServiceName @NonNull String name);
这里的@ServiceName是一个注解,限定了输入,如果对注解内容不是很了解可以看下本人下面的文章:
这个直接定义在Context.java中,之所以要特地提一下这个注解,是因为在它限定了输入内容之后,我们新加的服务如果想通过getSystemService被拿到,就得同步把名字加到这个注解里;
当然Context.java内方法的具体的实现都在frameworks/base/core/java/android/app/ContextImpl.java里面;
@Override
public Object getSystemService(String name) {
return SystemServiceRegistry.getSystemService(this, name);
}
这里引出了一个关键的类SystemServiceRegistry;
先看一下名词解释;
/**
* Manages all of the system services that can be returned by {@link Context#getSystemService}.
* Used by {@link ContextImpl}.
* @hide
*/
public final class SystemServiceRegistry
再整体看一眼SystemServiceRegistry这个类;
位置:frameworks/base/core/java/android/app/SystemServiceRegistry.java
代码不多才1000多行;
它的构造方法是私有的,不允许被实例化;
// Not instantiable.
private SystemServiceRegistry() { }
主要成员变量;
<