当前位置: 首页 > 后端技术 > Java

进程间通信IPC和Binder机制原理

时间:2023-04-01 23:19:18 Java

1、Intent隐式意图携带数据2、AIDL(Binder)3、广播BroadCast4、内容提供者ContentProvider5、Messager(内部通过binder)6、文件共享7、socket----------------------------------------------Binder底层原理-------------------------------------Binder是一种提供远程过程调用的进程间通信机制(RPC)函数;Binder作为一个类,可以与不同的进程进行通信。从英文字面意思来看,Binder有活页夹的意思,那么它把什么东西绑定在一起呢?在Android系统的Binder机制中,由一些系统组件组成,分别是Client、Server、ServiceManager和Binderdriver,其中Client、Server和ServiceManager运行在用户空间,Binder驱动运行在内核空间。粘合剂是一种将这四个组件粘合在一起的胶水。其中,核心组件是Binder驱动,ServiceManager提供辅助管理功能。Client和Server正好在Binderdriver和ServiceManager中。在提供的基础设施上,进行客户端-服务器之间的通信。Android平台已经实现了ServiceManager和Binder驱动,开发者只需要按照规范实现自己的Client和Server组件即可。综上所述,Android系统Binder机制中Client、Server、ServiceManager和Binderdriver这四个组件的关系如下图所示:1、Client、Server和ServiceManager在用户空间实现,Binder驱动是内核空间实现Medium2.Binder驱动和ServiceManager已经在Android平台上实现。开发者只需要在用户空间实现自己的Client和Server即可。3、Binder驱动提供设备文件/dev/binder与用户空间进行交互,Client、Server、ServiceManager通过open和ioctl文件操作函数与Binder驱动进行通信4、实现Client与Server的进程间通信间接通过Binder驱动5.ServiceManager是一个守护进程,用来管理Server并向Client提供查询Server接口的能力,到此为止,终于对Binder机制有了一个感性的认识。RPC代码是远程调用的方法名,RPC数据是方法的参数。handle是相应服务向ServiceManager注册的索引值。binder协议指定是否发送或接收数据以及数据格式。例如:TelephonyManagertm=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);RPC代码为getSystemService,RPC数据为Context.TELEPHONY_SERVICE,rpc层产生这些数据,ipc层将这些数据用handle,binder协议打包通过binder驱动传给服务端,服务端解析这些数据完成进程间通信。