Binder进程间通信示例 (一)

本文深入探讨了Android的跨进程通信(IPC)机制,重点介绍了Binder机制的优势与工作原理,包括其在C/S架构中的应用,以及如何通过AIDL实现跨进程的数据交换和事件监听。

IPC(Inter-Process Communication) 跨进程通信

本节主要是熟悉Android IPC中的AIDL实现方式

导读: IPC -> Binder -> 示例 未包含对aidl创建规则的讲解,可以查看

一、任何一个操作系统都有对应的IPC机制

  1. windows : 通过剪切版、管道、油槽(windows中最简单的一种进程间通信)等进行通信

  2. Linux : 通过命名管道、共享内存、信号量(本质可以理解为数据操作锁) 等进行通信

  3. Android : 并不是完全继承自Linux,通信方式一般优选Binder、Socket等等

二、Android Binder机制

  1. Android的进程架构(每个Android进程都是独立的,由用户空间和内核空间组成)

    模型

    设计优点:

    • 稳定性、安全性高:每一个Android进程都拥有自己独立的虚拟地址空间,一方面可以限制其它进程访问自己的虚拟地址空间,另一方面,当一个进程崩溃时不至于牵连其它的进程

    • 便于复用与管理:内核共享有助于系统维护和并发操作、节省空间

  2. Binder机制优点

    • 传输效率高、可操作性强

      • 对于消息队列、Socket和管道而言,数据先从发送方的缓存区拷贝到内核开辟的缓存区中,再从内核缓存区拷贝到接收方的缓存区,一共拷贝两次

      • 对于Binder来说,数据从发送方的缓存区拷贝到内核的缓存区,而接收方的缓存区与内核的缓存区是映射到一块物理地址的

    • 实现C/S架构方便

      • Client和Server端相对独立、很稳定

    • 安全性高

      • Binder机制为每个进程分配了UID/PID,且在Binder通信时会根据UID/PID进行检测

  3. Binder定义了四个角色:Server、Client、ServiceManager和Binder驱动

    • 其中Server、Client、ServiceManager运行于用户空间,Binder驱动运行于内核空间

    • ServiceManager工作流程 : Service在ServiceManager注册,然后Client通过Binder名字获取Binder实体引用或代理类

    • Binder驱动

      • 与硬件设备没有关系,工作于内核态

      • 提供open()、mmap()、poll()、ioctl()等标准文件操作

      • 负责进程之间binder通信的建立、传递、计数管理以及数据的传递交互等底层支持

      • 驱动和应用程序之间定义了一套接口协议,主要功能由ioctl()接口实现

      • 代码位于linux目录的drivers/misc/binder.c中

  4. Binder工作原理

    • transact方法和onTransact方法,可以通过自己编写aidl文件,然后ReBuild一下,然后去查看具体aidl生成的java源码,如接下来的IBookManagerService中的IBookManager类文件

三、 实现Binder进程通信,以书为例子,实现C端查看S端书籍,S端书籍增加时通知C端

通过AS新建AIDL文件会自动生成aidl文件夹,这里需要注意包名,尽量将所有aidl相关放在同一个包内

这里需要需要注意对象的跨进程传输实际是反序列化操作,具体代码内会标准,所以如果想要实现监听事件,通知Client,需要使用到Android自带的RemoteCallbackList类,毕竟跨进程传输底层的Binder对象是同一个

注意耗时操作,Server端操作的方法都是在服务端Binder线程池中,非UI线程,而onServiceConnected和onServiceDisconnected都是在UI线程中

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值