Context.getSystemService
1、android 写应用时,经常用到的一个接口,如下:
看着这个接口的名字,是获取系统的Service,给我的错觉得是,直接得到某个Service的BinderProxy接口,但实际上不是这样的,而是得这个
原创转载请注明出处:
Service的xxxManager接口,而xxxManager刚好是的xxxService的Client。所以得出的结论是,Context.getSystemService
返回的是不是一个service,而是某一种service的Client。
Context.getSystemService()在ContextImpl.java的实现如下:
Context.getSystemService()在ContextImpl.java的实现如下:
可以看出,这是在一个HashMap中直接根据名字获取的,那么在什么时候把xxxManager加入到这个HashMap中呢,同样是在
ContextImpl.java中,部分的代码截图如下:
这个registerService就是把xxxManager加入到这个SYSTEM_SERVICE_MAP的HashMap中的
以刚才的DropBoxManager为例:
这样就比较详细是怎么回事了