Android Binder机制简述

Android Binder是其独特的跨进程通信(IPC)机制,源于OpenBinder。它使得不同进程间的Service能进行通信。Binder通信涉及Server的注册、Client的服务获取以及数据交换过程。在通信模型中,Binder实体对象在Server端,引用对象在Client端,两者通过内核空间的共享实现数据传输。关键概念包括BBinder、BpBinder、IInterface和Binder代理对象,这些组件共同确保了Android系统的高效服务交互。

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

一、Android binder是什么?

  1. Android平台上的一种跨进程通信(IPC)机制

  2. 从OpenBinder演化而来

  3. 从Android应用层角度来说,Binder是客户端和服务端进行通信的媒介

二、IPC原理

在这里插入图片描述

每个Android进程,只能运行在自己的进程所拥有的虚拟地址空间
Client进程与Server进程通信,利用进程间可共享的内核空间来完成底层通信工作

三、Android C/S通信机制

在这里插入图片描述

  1. Server是Service的提供者,提供的Service需要在Server Manager进行注册;Server可以注册一个或多个Service
  2. Client是Service的使用者,使用前需要向Server Manager申请服务
  3. Client获取到Service后,可以调用Server服务了

四、Binder通信模型

在这里插入图片描述

1. 注册服务

在这里插入图片描述

  1. 首先Server在自己的进程向Binder驱动申请创建Service的Binder实体

  2. Binder驱动为这个Service创建位于内核的Binder实体节点和Binder引用

  3. Server通过Binder驱动将Server名字和Service的Binder引用打包发送给ServiceManager

  4. ServiceManager收到数据包后,取出Service的名字额引用,写入一张查找表

2.获取服务

在这里插入图片描述

  1. Client利用hanle为0的应用找到ServiceManager
  2. 向ServiceManage发送XXXService的访问申请
  3. ServiceManager从请求包中获取XXXService的名字,在查找表中找到对应的条目,取出对应的Binder引用
  4. ServiceManager将XXXService的Binder引用回复给Client

3.使用服务

在这里插入图片描述

  1. Client和Server既是发送方,又是接收方

  2. 发送方通过自身的Binder实体进行发送操作,把数据通过接收方的Binder引用发送给接收方

  3. Binder驱动会处理这个发送请求,利用内核空间进程共享的机制:

    (1) 把发送方的数据写入缓存(binder_write_read.write_buffer)(对于接收方来说为读缓存区)

    (2) 接收方之前一直在阻塞状态中,当写缓存有数据,则会读取数据,执行命令操作

    (3) 接收方执行完后,会把返回结果同样采用写入缓存区(对于发送方为读缓存区)

五、Binder机制的关键概念

在这里插入图片描述

  1. Binder实体对象:Binder服务的提供者,类型是BBinder,也称为BBinder对象
  2. Binder引用对象:Binder实体对象在客户端进程的代表,类型是BpBinder,也称BpBinder对象
  3. Binder代理对象:代理对象也称接口对象,主要是为客户端的上层服务提供接口服务,类型是IInterface;Android将Binder的引用对象和代理对象分开的好处是一个Binder引用对象可以有多个代理对象,方便应用层使用
  4. IBinder对象:实体对象和引用对象的统称,因为BBinder和BpBinder都继承自IBinder

代理对象,方便应用层使用
4. IBinder对象:实体对象和引用对象的统称,因为BBinder和BpBinder都继承自IBinder

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值