Android Context getSystemService分析

本文详细分析了Android中Context的getSystemService方法的工作原理,从Activity调用该方法开始,逐步深入到ContextWrapper、ContextImpl、SystemServiceRegistry,揭示了通过ServiceFetcher实现的容器单例模式来获取和缓存系统服务的过程。静态代码块用于初始化系统服务注册,而实际服务创建发生在首次调用getSystemService时。这是一个巧妙的系统服务管理和单例实现方式。
摘要由CSDN通过智能技术生成

我们知道一个应用的Context个数是Activity个数+Service个数+1

当我们希望获取到系统服务时,可以调用Context的getSystemService方法,如获取到ActivityManager:

ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);

那么getSystemService又是怎么工作的呢?

Activity是一个Context,他调用getSystemService时,会调用到Context的包装类ContextWrapper的getSystemService方法,如下:

@Override
public Object getSystemService(String name) {
    return mBase.getSystemService(name);
}

mBase是Context的实现类ContextImpl,很明显ContextWrapper又会委托ContextImpl去实现具体逻辑。

我们跟进ContextImpl中的getSystemService方法,如下:

@Override
public Object getSystemService(String name) {
    return SystemServiceRegistry.getSystemService(this, name);
}

其内部是调用了SystemServiceRegistry的getSystemService方法,这时获取系统服务的过程就转移到了SystemServiceRegistry了。

我们看到SystemServiceRegistry的getSystemService方法即可,如下:

/**
 * Gets a system service from a given context.
 */
public 
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值