开发艺术探索--关与Binder总结

Binder是Andriod中的一个类,它实现了IBinder的接口,在Android中是一种跨进程的通信方式。充当服务端和客户端的桥梁,当通过bindService和服务端连接的时候,服务端会返回一个Binder对象,通过这个对象就可以获取服务端的数据和服务了。

 

和Socket相比,Socket实现跨进程通信需要进行两次内存拷贝,而Binder只需要一次,效率要高一点。

 

基本总结原理

Binder是基于C/S结构的一种面向对象的IPC(跨进程通信)机制。

主要有四个核心元素:Client、Server、Binder驱动和ServiceManager。

 

对于Client

Binder是Server本地对象的一个引用,这个引用实际上是一个代理对象,Client通过这个代理对象来间接访问Server的本地对象。

 

 

对于Server

Binder是提供具体实现的本地对象,需向ServiceManager注册。

 

对于Binder驱动

它是连接Client来Server的桥梁,负责将代理对象转化为本地对象,并将Server的执行结果返回给Client。

 

对于ServiceManager

它保存了Server Binder字符名称和Binder引用的映射,Client通过它来找到Server的Binder引用。

 

实现方式

可以通过AIDL(接口定义语言)实现,通过AIDL跨进程通信内部就是通过Binder来实现的,AIDL可以理解为帮助开发者自动创建了Binder 。

 

定义一个接口类型的aidl文件,里面定义一些抽象方法,系统会自动生成对应java接口,这个java接口继承了IInterface接口,内部会生成了一个Stub类和一个Stub的代理类Proxy,这个Stub类继承了Binder并且实现了这个java接口。所有通过Binder传输的接口都要实现IInterface接口。如果跨进程通信的话,会走transact过程。这个逻辑是由Stub代理类Proxy来完成的。

 

关于Binder网上介绍太多,看的也头疼,大部分过于抽象或者过于深入源码细节,真正浅显易懂的文章很少,脑细胞实在不够。%>_<%

 

详情请看《Android开发艺术探索》第二章IPC机制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值