(本文的分析基于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