binder c++ 类

Binder

binder作为android中ipc的机制,应用在android的各个地方。包含了三层(java, C++/C , 驱动)。
binder的目的是实现多个进程之间通信,之间传递的数据有基本数据类型,binder类型,这个包装在parcel中。
在c++层使用多个类封装:

主要的类有:

  1. RefBase 关于引用计数
  2. Parcel 这个是传输的数据容器, 还支持######IBinder对象######的引用。
  3. IBinder binder对象接口,里面有transact 纯虚函数
  4. BpBinder binder引用对象,存在于BpRefBase中,由binder驱动生成该对象
  5. BBinder binder的实体对象
  6. IInterface 接口
  7. BnInterface 模板类,继承了IXX 和BBinder
  8. BpInterface 模板类, 继承了IXX和BpRefBase
  9. IPCThreadState
  10. ProcessState 该类生成后,将打开Binder driver。

用C++编写binder应用,要有个客户端代码和服务端代码,我的一个应用, 主要代码有:

客户端
 
 
  1. int main(int argc, char** argv)
  2. {
  3. LOGI("binderclient");
  4. printf("binderclient --\n");
  5. int sum = 0;
  6. sp mTestBinserService;
  7. if (mTestBinserService.get() == 0) {
  8. sp sm = defaultServiceManager();
  9. sp binder;
  10. do {
  11. binder = sm->getService(String16("my.test.binder"));
  12. if (binder != 0)
  13. break;
  14. LOGI("getService fail");
  15. usleep(500000); // 0.5 s
  16. } while (true);
  17. mTestBinserService = interface_cast (binder);
  18. LOGE_IF(mTestBinserService == 0, "no ITestBinserService!?");
  19. }
  20. sum = mTestBinserService->add(3, 4);
  21. LOGI("sum = %d", sum);
  22. return 0;
  23. }
服务端
 
 
  1. int main(int argc, char** argv)
  2. {
  3. sp proc(ProcessState::self());
  4. sp sm = defaultServiceManager();
  5. LOGI("TestBinderService before");
  6. //TestBinderService::instantiate();
  7. sm->addService(String16("my.test.binder", new TestBinderService());//TestBinderService继承于B你Interface, 也就是继承于ITestBinderService和BBinder.
  8. LOGI("TestBinderService End");
  9. ProcessState::self()->startThreadPool();
  10. IPCThreadState::self()->joinThreadPool();
  11. LOGI("TestBinderService End");
  12. return 0;
  13. }
进程间的回调

使用binder可以实现进程之间的回调。Ibinder接口作为函数的参数,就可以了。





转载于:https://www.cnblogs.com/monkeyyuan/p/4397945.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值