Android系统中进程间通讯都是建立在Binder通讯基础上的,类似过往项目中使用的一些RPC通讯手段如(Corba、TinyRpc、DBus等)
Binder通讯中与Corba通讯相似,都需要Server、Client、和ServiceManager三种角色,Corba是以网络为载体基于TCP/IP的,Binder是基于Binder驱动的,Android系统中增加了一些虚拟驱动Ashm、Logger、Binder、LowMemoryKiller,Binder驱动尤为复杂。
首先Binder Service需要向ServiceManager去注册服务,流程如下
1.Binder Servier需要打开Binder驱动
2.Binder Server需要将Binder驱动得到的文件描述符进行映射
3.向驱动发送IOCTL读写消息
4.解析并处理消息
struct binder_state *binder_open(unsigned mapsize);定义在Binder.h中
返回的binde_state定义如下
struct binder_state
{
int fd;
void *mapped;
unsigned mapsize;
};
参考Android源码中bctest的实现方式可以得到下面的过程
#define LOG_TAG "TEST_SERVER"
#include "binder.h"
const char* service_name = "test_server";
const unsigned int mapped_size = 1024;
int service_publish(struct binder_stat