系统服务 SystemServiceRegistry

本文探讨了Android系统服务的获取,重点关注SystemServiceRegistry。通过分析`getSystemService`接口,指出添加新服务需更新@ServiceName注解。文章还介绍了SystemServiceRegistry的内部结构,包括构造方法、主要成员变量、ServiceFetcher接口及其实现类,强调了其在管理和服务创建中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在开发过程中,常常会用到系统服务,有时候也会添加一些系统服务;
这里看一下Android P相关源码;

在APP层获取系统服务的接口是getSystemService;
它被定义在frameworks/base/core/java/android/content/Context.java

public abstract @Nullable Object getSystemService(@ServiceName @NonNull String name);

这里的@ServiceName是一个注解,限定了输入,如果对注解内容不是很了解可以看下本人下面的文章:

Java注解,小试牛刀

这个直接定义在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() { }

主要成员变量;

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值