刚开始看android的IPC通信机制,BBinder与BpBinder这两者容易混淆。其实这两者是很好区分,对于service来说继承了BBinder(BnInterface)因为BBinder有onTransact消息处理函数,而对于与service通信的client来说需要继承BpBinder(BpInterface),因为BpBinder有消息传递函数transcat。

以cameraService的client为例
Camera.cpp中getCameraService函数取得远程CameraService的IBinder对象,然后通过 mCameraService = interface_cast<ICameraService>(binder);
进行重构得到了BpCameraService对象。而BpCameraService继承了BpInterface。
cameraService:
defaultServiceManager()->addService(
String16("media.camera"), new CameraService()); 传入了BBinder。

IPC传递的过程中IBinder指针不可缺少,这个指针对一个进程来说就像是socket的ID一样,唯一的。所以不管这个IBinder是BBinder还是BpBinder, 他们的都是在重构BpBinder或者BBinder的时候把IBinder作为参数传入。


更多相关文章

  1. Android的存储系统—Vold与MountService分析(三)
  2. Android(安卓)VelocityTracker简介
  3. Android(安卓)从JNI中传入UTF8 的字符到Java
  4. Android面试系列文章2018之Kotlin语言面试篇
  5. binder 实例分析
  6. Android(安卓)GPS架构分析(一)
  7. android自定义控件宽高的获取
  8. Android(安卓)电话系统框架介绍
  9. Android(安卓)通知栏——Notification

随机推荐

  1. 移动应用平台首选iOS还是Android?
  2. UI控件之菜单(Menu)
  3. 安卓学习路径 从入门到精通到项目实战教
  4. Android使用Volley请求网络
  5. Android官方开发文档Training系列课程中
  6. 【Android(安卓)修炼手册】常用技术篇 --
  7. Android触摸事件的应用
  8. 记事:ubuntu 9.10(WUBI,windows安装)环境下
  9. 用kotlin方式打开《第一行代码:Android》
  10. Android(安卓)LOG机制的实现