Binder机制分析【一】-简介

本文详细介绍了Android中的Binder机制,包括其工作原理、通信流程及Binder服务器、驱动和客户端的具体实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Binder,英文意思是别针,回形针。在Android中,它是用于完成进程间通信(IPC),在它的官方网站上是这样定义的。binder是一个分布式的组件架构,它类似于COM和CORBA。 
binder 通信是一种client-server 的通信结构, 
    1. 从表面上来看,是client 通过获得一个server 的代理接口,对server 进行直接调用; 
    2. 实际上,代理接口中定义的方法与server 中定义的方法是一一对应的; 
    3.client 调用某个代理接口中的方法时,代理接口的方法会将client 传递的参数打包成为Parcel 对象; 
    4. 代理接口将该Parcel 发送给内核中的binder driver. 
    5.server 会读取binder driver 中的请求数据,如果是发送给自己的,解包Parcel 对象,处理并将结果返回; 
    6. 整个的调用过程是一个同步过程,在server 处理的时候,client 会block 住。 
Binder是一种架构,这种架构提供了服务器端接口,Binder驱动,客户端接口三个模块。 

 

Binder服务器: 
      Binder服务器实际上是一个Binder对象,该对象一旦创建,就启动了一个隐藏线程,该线程不断的接受Binder驱动所发回的消息,收到消息后,执行Binder对象中的onTransact() 
方法。因此,要实现一个Binder服务器,就必须重载onTransact()方法。 
Binder驱动: 
      Binder服务器端的Binder对象创建时,就会在Binder驱动中创建一个mRemote对象,该对象也是Binder类。客户端要访问Binder服务器时,都需要见过该mRemote对象. 
Binder客户端: 
      Binder客户端要想访问服务器,必须先获取mRemote对象,然后通过mRemote对象的transact()方法调用。Binder驱动重载了该方法,重载的内容有: 
1.以线程间消息通信的模式,像服务器端发送客户端传过来的参数。 
2.挂起当前线程(客户端线程),等待服务器端执行完后的通知(notify)。 
3.接收服务器端的通知,然后继续执行客户端线程,并返回到客户端代码区。 
由此可见,客户端要调用服务器端的binder,必须通过binder驱动进行中转,即存在两个Binder对象,一个服务器端的Binder对象,一个驱动中的Binder对象,不同的是驱动中的Binder对象不会再额外产生一个线程。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值