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获取到的










网友评论