Java 层Binder 架构

摘录自深入理解 Android 卷2


Binder 架构

基本已经分析完 Java 层和 Native 层的 Binder 通信的原理了。剩下 kernel 层的 Binder 驱动,有空再写吧。写的很杂很乱,反正写给自己看的,自己看得懂就好了

  • BinderProxy.java和BpBinder.cpp 是在 Java 层像service manager 查询的时候,以拿到 service manager 代理为例,在 native 层实例化了 Java 层的 BinderProxy.java 和 native 层 的BpBinder.cpp,并且将 BpBinder对象保存在 BinderProxy 的 mObject 中,将 BinderProxy 保存在 BpBinder成员了objectManager 中的一个vector。
  • Binder.java 和 JavaBBinder.cpp 首先在 Binder 的构造函数进行 init()的 native 实现的时候,构造了一个 JavaBBinderHolder.cpp 对象保存在 Binder.java 的 mObject 中,此时还没有JavaBBinder.cpp。然后是在进行通信的时候,在 [email protected] 的时候产生关联的,在writeStrongHandle 的 native 的实现中,会在 JavaBBinder.cpp 中创建一个JavaBBinder 对象,并且 JavaBBinder 内部持有这个 Binder.java 对象。造成 Binder.java 持有 JavaBBinderHolder.cpp,JavaBBinderHolder.cpp 持有JavaBBinder.cpp,JavaBBinder.cpp 持有 Binder.java。
  • 当进行通信时,client 端通过这个 BinderProxy.java发送请求,经由 BpBinder.cpp调用其 IPCThreadState.cpp 进行 talkWithDriver(),驱动收到后,将这个请求转发到[email protected],内部 JNI 调用其持有的 [email protected],后者内部调用具体实现的服务的onTransact。

综上讨论好了 Java 层和 Native 层的 Binder 通信

你可能感兴趣的:(Java 层Binder 架构)