我们知道一个应用的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