ServiceManager.addService加入的服务,可以通过ServiceManager.getService获取
getSystemService并不能获取到所有ServiceManager中注册的服务。Activity.getSystemService实际上使用的是ContextImpl中的getSystemService,里面包含服务,是通过SystemServiceRegistry的静态代码块进行注册的:
ContextImpl.java
@Override
public Object getSystemService(String name) {
return SystemServiceRegistry.getSystemService(this, name);
}
private SystemServiceRegistry() { }
static {
registerService(Context.ACCESSIBILITY_SERVICE, AccessibilityManager.class,
new CachedServiceFetcher<AccessibilityManager>() {
@Override
public AccessibilityManager createService(ContextImpl ctx) {
return AccessibilityManager.getInstance(ctx);
}});
所以,通过ServiceManager.addService加入的自定义服务,是无法通过getSystemService获取到的
网友评论