使用C++自定义Binder

本文详细介绍了如何使用C++自定义Binder服务,包括核心类的关系、自定义接口定义、BnTestBinderService与BpTestBinderService的角色、onTransact()的实现,以及客户端和服务端的交互过程。通过理解BBinder、BnTestBinderService、BpBinder、BpTestBinderService的功能,展示了Binder在进程间通信中的作用。
摘要由CSDN通过智能技术生成

参考Binder使用示例学习一下binder。

Binder的核心类关系见下图:

红框内是需要开发自定义binder时自己定义的,其中:

1).Binder实体对象:Binder服务的提供者,继承自BBinder。

2).Binder引用对象:Binder实体对象在客户进程的代表。

3).Binder代理对象:为客户端的上层应用提供接口服务,通过代理对象,应用可以像使用本地对象一样使用远端实体对象的服务。

使用C++开发Binder服务:

1)定义用户自定义接口,C++中需要使用抽象基类和纯虚函数来实现。这些函数接口统一了客户端和服务端的函数调用。

class ITestBinderService: public IInterface {
public:
	DECLARE_META_INTERFACE(TestBinderService);

	virtual int add(int a, int b) = 0;
};

声明BnTestBinderService,它必须要继承模板类BnInterface<>;该模板类继承了BBinder和ITestBinderService。

class BnTestBinderService: public BnInterface<ITestBinderService> {
public:
	virtual status_t onTransact(uint32_t code, const Parcel& data,
			Parcel* reply, uint32_t flags = 0);
};

2)定义BpTestBinderService并实现BnTestBinderService的虚函数onTransact()。这两个类运行的在不同的进程中,但需要把他们定义在同一个文件中。这是因为:它们使用了相同的函数码和类的描述字串,如果分开定义需要定义两份函数名和描述字串。

BpTestBinderService继承了模板类BpInterface<>,BpInterface<>继承了ITestBinderService和BpRefBase;ITestBinderService定义了binder服务接口,BpRefBase聚合了一个binder引用对象BpBinder;因此BpTestBinderService成为了binder代理。BpTestBinderService使用ITestBinder

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值