Binder 机制详解—Binder Java框架(转自Cloud Chou's Tech Blog)
来源:互联网 发布:oracle需要使用的端口 编辑:程序博客网 时间:2024/04/30 12:36
Binder的java层框架
Binder的Java框架层包含以下类(frameworks/base/core/java/android/os):IBinder,Binder,IInterface,ServiceManagerNative,ServiceManager,BinderInternal,IServiceManager,ServiceManagerProxy。
Binder的Java框架层部分方法的实现在本地代码里,源码位于frameworks/base/core/jni。
先前博客《Binder service入门—Framework binder service》中ICloudMananger与Binder Java 框架层的类图如下图所示(若看不清,请点击看大图):
与Binder本地框架类似,声明的binder service接口必须继承自IInterface,这里ICloudManager继承自IInterface。与Binder 本地框架层不相同的是,Java层的IBinder接口直接继承自IInterface,而本地的IBinder类继承自RefBase。本地的IBinder有两个子类,BBinder和BpBinder,Java层的IBinder接口也有两个子类,Binder和BinderProxy。Java层服务端的CloudManager (binder service实体类) 直接继承自Binder类,并实现了binder service接口ICloudManager,而客户端的CloudManagerProxy类只需实现binder service接口ICloudManager即可。
Binder java层框架相关 Jni源码
Binder Java层框架类有不少方法是native的,意味着这些native方法是jni方法。Java层框架中的类Binder,BinderProxy,BinderInternal的native方法的实现是在源码frameworks/base/core/jni/android_util_Binder.cpp里,Java层框架中Parcel类native方法的实现是在frameworks/base/core/jni/android_os_Parcel.cpp里。接下来我们将详细分析android_util_Binder.cpp。
重要数据结构
1) gBinderOffsets,代表android.os.Binder 类
2) gBinderInternalOffsets,代表com.android.internal.os.BinderInternal类
3) binderproxy_offsets_t,代表android.os.BinderProxy类
4) JavaBBinder和JavaBBinderHolder
JavaBBinder和JavaBBinderHolder相关类类图如下所示(若看不清,请点击看大图),JavaBBinder继承自本地框架的BBinder,代表binder service服务端实体,而JavaBBinderHolder保存JavaBBinder指针,Java层Binder的mObject保存的是JavaBBinderHolder指针的值,故此这里用聚合关系表示。BinderProxy的mObject保存的是BpBinder对象指针的值,故此这里用聚合关系表示。
重要函数
1) javaObjectForIBinder 将本地IBinder对象转为Java层的IBinder对象
2) ibinderForJavaObject 将Java层的IBinder对象转为本地IBinder对象
初始化流程
Java虚拟机启动时会调用jni方法来注册Java层binder框架的本地方法,流程如下图所示(若看不清请点击看大图):
- Binder 机制详解—Binder Java框架(转自Cloud Chou's Tech Blog)
- Java层Binder框架通信原理(转自Cloud Chou's Tech Blog)
- Android Binder总结(转自Cloud Chou's Tech Blog)
- Cloud Chou's Tech Blog
- Cloud Chou's Tech Blog编译相关
- 005——Binder 机制详解—Binder Java框架
- Binder 机制详解—Binder 本地框架
- 004——Binder 机制详解—Binder 本地框架
- Binder 机制详解—Binder 系统架构
- Java层Binder机制详解
- Java层Binder机制详解
- Java层Binder机制详解
- 001——Binder 机制详解—Binder IPC 程序结构
- 002——Binder 机制详解—Binder 系统架构
- Android - Binder机制 - Binder框架总结
- Binder机制学习笔记-Binder框架
- Android - Binder机制 - Binder框架总结
- [Android5.1]Binder机制学习---Binder框架
- ---
- 什么是非自然链接
- 7个方法可以让你成为更好的程序员
- ubuntu自动挂载磁盘分区
- 【伊利丹】Hadoop2.0 NN HA实验记录
- Binder 机制详解—Binder Java框架(转自Cloud Chou's Tech Blog)
- ios 8 发布后的一个初探swift语言的学习笔记(基本数据类型)
- 非常难得的iPad版房地产售楼助手应用
- web标准、可用性、可访问性 可维护性
- 拿什么教育孩子
- iOS:多线程编程指南(一)--介绍&线程管理
- Dx10和Dx9的一些区别
- 使用最新struts2(2.3.15.2),不能使用DMI动态调用方法。在struts.xml中打开动态方法调用。
- 黄岛挡土墙倒塌的