从getSystemService()出发获取系统服务

本文深入解析Android中getSystemService()的工作原理,从Activity、ContextThemeWrapper、ContextWrapper到ContextImpl,逐步剖析系统服务的获取过程。重点探讨SystemServiceRegistry如何管理并注册系统服务,以及ServiceFetcher的三种实现类:CachedServiceFetcher、StaticServiceFetcher和StaticApplicationContextServiceFetcher的作用。
摘要由CSDN通过智能技术生成

(本文的分析基于Android7.0的源码)
开始阅读本文的你一定很好奇,为啥在Activity使用getSystemSerive,传入相应的系统服务名字就可得到相应的系统服务,这其中又是怎么管理系统服务的呢?先不要急,本文将从最基础的入手慢慢为你介绍getSystemService的原理。
我们使用getSystemService最多的地方莫过于在Activity中使用,暂且看看Activity中是怎样实现的。

@Override
public Object getSystemService(@ServiceName @NonNull String name) {
    if (getBaseContext() == null) {
        throw new IllegalStateException(
                "System services not available to Activities before onCreate()");
    }

    if (WINDOW_SERVICE.equals(name)) {
        return mWindowManager;
    } else if (SEARCH_SERVICE.equals(name)) {
        ensureSearchManager();
        return mSearchManager;
    }
    return super.getSystemService(name);
}

我们都知道Activity是继承于ContextThemeWrapper,因此上述源码中最后返回的也是ContextThemeWrapper中的getSystemService这个方法的返回值。再来看看ContextThemeWrapper中的这个方法。

@Override
public Object 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值