美文网首页
getSystemService

getSystemService

作者: 小寒飞刀 | 来源:发表于2017-04-13 20:24 被阅读0次

getSystemService最终是在SystemServiceRegistry.java里做的:

 public static Object getSystemService(ContextImpl ctx, String name) {
    ServiceFetcher<?> fetcher = SYSTEM_SERVICE_FETCHERS.get(name);
    return fetcher != null ? fetcher.getService(ctx) : null;
}

而SYSTEM_SERVICE_FETCHERS是registerService的时候设的:

 static <T> void registerService(String serviceName, Class<T> serviceClass,
        ServiceFetcher<T> serviceFetcher) {
    SYSTEM_SERVICE_NAMES.put(serviceClass, serviceName);
    SYSTEM_SERVICE_FETCHERS.put(serviceName, serviceFetcher);
}     

registerService是在ContextImplInjector.java里调用的:

 static void registerMiuiServices() {
    SystemServiceRegistry.registerService(Context.SECURITY_SERVICE, SecurityManager.class,
        new CachedServiceFetcher<SecurityManager>() {
            @Override
            public SecurityManager createService(ContextImpl ctx) {
                IBinder b = ServiceManager.getService(Context.SECURITY_SERVICE);
                ISecurityManager service = ISecurityManager.Stub.asInterface(b);
                return new SecurityManager(service);
            }
        }
    );
    SystemServiceRegistry.registerService(Context.LOCATION_POLICY_SERVICE, LocationPolicyManager.class,
        new CachedServiceFetcher<LocationPolicyManager>() {
            @Override
            public LocationPolicyManager createService(ContextImpl ctx) {
                return new LocationPolicyManager(ILocationPolicyManager.Stub.asInterface(
                        ServiceManager.getService(Context.LOCATION_POLICY_SERVICE)));
            }
        }
    );
}     

over, 后面再加binder相关

相关文章

网友评论

      本文标题:getSystemService

      本文链接:https://www.haomeiwen.com/subject/yphiattx.html