从Java层理解Android Binder(二):Service Manager

上一节我们学习了AIDL中涉及到的Binder相关的类,如下图:

接下来讲解Service Manager。

Service Manager是一个笼统的概念,整体来说它是Binder Driver之上的"DNS"功能,用于Client方便的获得其他服务,比如Activity Manager Service。ServiceManager和AcitivtyManagerService从层次上讲是平级的,都是Binder Server,只不过ServiceManager统一维护了很多Binder Server,如果不通过Service Manager,也是可以访问到Activity Manager Service的。

Service Manager也包括C++实现和Java封装。C++层的特点是最早初始化,循环读取消息。我们这里不做过多介绍,而是主要分析Java层的类结构。

Service Manager的目的是提供其他service的入口,因此它提供了getService等方法。与上文提到的AIDL结构对比来看,他们是这样的:


定义了一个IServiceManager接口,与我们前文提到的业务接口同级,继承自IInterface。

前文提到AIDL自动生成了一个Stub类,它实现了业务接口,同时继承自Binder。我们再看看ServiceManager这边:


看到没,ServiceManagerNative和Stub基本一毛一样,都是抽象类,同样的类结构,同样的方法。都是调用C++实现跨进程通信。

那么Proxy呢?相信你一定也猜到了:


AIDL中Proxy是Stub的内部类,而ServiceManager中Proxy也是Native的内部类,完全一致!

那么AIDL中具体的业务实现类MyServer,在ServiceManager中对应的是哪个类呢?ServiceManagerNative是个抽象的,必然有一个子类啊?很遗憾我这里没找到。

最后有一个就叫ServiceManager.java的类,它就是一个工厂类,提供了静态的getService方法,没啥特别的。

最后整体类图如下:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值