当前位置: 首页 > news >正文

揭阳网站建设策划方案土建网招聘信息

揭阳网站建设策划方案,土建网招聘信息,住房和城乡建设部网站造价,wordpress 菜单 数据库前言 众所周知#xff0c;对于binder通信来说#xff0c;native层通信的基础架构是BpBinder/BBinder#xff0c;Java层的基础通信架构是BinderProxy/Binder#xff0c;这两者是如何统一起来的呢#xff1f; 正文 在binder的跨进程传递数据实现中#xff0c;数据是包裹在…前言 众所周知对于binder通信来说native层通信的基础架构是BpBinder/BBinderJava层的基础通信架构是BinderProxy/Binder这两者是如何统一起来的呢 正文 在binder的跨进程传递数据实现中数据是包裹在Parcel中的。具体的传递方式体现在Parcel类的两个方法writeStrongBinder()和readStrongBinder()中前者的功能是写入Binder对象后者的功能是读取Binder对象。同样Parcel在java层和native层各有一套。不过查看代码可知java层的Parcel只是native层的封装两者通过jni建立关联。 public final void writeStrongBinder(IBinder val){nativeWriteStrongBinder(mNativePtr, val);}public final IBinder readStrongBinder(){return nativeReadStrongBinder(mNativePtr);}private static native String nativeReadStrongBinder(long nativePtr);private static native void nativeWriteStrongBinder(long natievPtr, IBinder); 复制 jni层代码如下 static void android_os_Parcel_writeStrongBinder(JNIEnv* env, jclass clazz, jlong nativePtr, jobject object){Parcel* parcel reinterpret_castParcel*(nativePtr);if (parcel ! NULL){const status_t err parcel-writeStrongBinder(ibinderForJavaObject(env, object));if (err ! NO_ERROR){signalExceptionForError(env, clazz, err);}}}static jobject android_os_Parcel_readStrongBinder(JNIEnv* env, jclass clazz, jlong nativePtr){Parcel* parcel reinterpret_castParcel*(nativePtr);if (parcel ! NULL){return javaObjectForIBinder(env, parcel-readStrongBinder());}return NULL;} 复制 重点来了在jni层代码中发现了两个名字起的有点意思的函数ibinderForJavaObject()和javaObjectForIBinder()正是这两个函数将java层和native层统一了代码如下 spIBinder ibinderForJavaObject(JNIEnv* env, jobject obj){if (obj NULL) return NULL;//Instance of Binder?if (env-IsInstanceOf(obj, gBinderOffsets.mClass)){JavaBBinderHolder* jbh (JavaBBinderHolder*)env-GetLongField(obj, gBinderOffsets.mObject);return jbh-get(env, obj);}//Instance of BinderProxy?if (env-IsInstanceOf(obj, gBinderProxyOffsets.mClass)){return getBPNativeData(env, obj)-mObject;}return NULL;}jobject javaObjectForIBinder(JNIEnv* env, const spIBinder val){if (val NULL) return NULL;if (val-checkSubclass(gBinderOffsets)){//Its a JavaBBinder created by ibinderForJavaObjectjobject object static_castJavaBBinder*(val.get())-object();return object;}BinderProxyNativeData* nativeData new BinderProxyNativeData();nativeData-mOrgue new DeathRecipientList;nativeData-mObject val;jobject object env-CallStaticObjectMethod(gBinderProxyOffsets.mClass, gBinderProxyOffsets.mGetInstance, (jlong)nativeData, (jlong)val.get());...BinderProxyNativeData* actualNativeData getBPNativeData(env, object);if (actualNativeData nativeData){//Created a new Proxy...} else {delete nativeData;}return object;} 复制 ibinderForJavaObject()将java binder对象转换成native层binder对象javaObjectForIBinder()将native binder对象还原成java层binder对象。 总结 android在创建java层Binder对象和BinderProxy对象时会同时在native层创建对应的JavaBBinderHolder和BinderProxyNativeData。前者包含一个JavaBBinder类型的成员它继承自BBinder;后者包含BpBinder对象。这样就把java层和native层的连接建立起来了。 转自binder是如何在java层和native层实现统一的-腾讯云开发者社区-腾讯云
http://www.pierceye.com/news/466790/

相关文章:

  • google网站哪里找人做网站
  • 外贸网站建设如何做呢百度热搜风云榜
  • ASP网站建设实训报告总结山西建设公司网站
  • 网站建设使用的什么软件房屋设计风格
  • 厦门网站建设公司排名杭州小型网站建设服务
  • 西安建设主管部门官方网站中文搭建式软件开发工具
  • 南通网站建设论文网站首页导航栏怎么做
  • 建设网站的运行费包括什么北京市建设工程信息网安徽兴创
  • 我想在泉州做网站上上海网站设计
  • 百度seo网站优化一 网站开发体会
  • 成都58手机微信网站建设名录tiktok跨境电商好做吗
  • 电子科技 深圳 网站建设怎么做打码网站
  • 南宁小程序开发网站建设公司公司网站建设怎么选择
  • erp网站代做项目网络进度图
  • 网站建设胶州家园外贸网站怎么注册
  • 我想找阿里巴巴做网站推广建一个公司网站花多少钱
  • 最新购物网站建设框架wordpress 登录后台乱码
  • 音频网站开发做外贸网站需要营业执照
  • 企业网站搭建项目概述范文wordpress更改链接地址
  • 免费网站在线观看人数在哪直播建设工业网站首页
  • 权威的南昌网站设计wordpress游客评论游客
  • 乡镇府建设网站什么是外链
  • 营销型网站设计流程电子商务网站建设软件
  • 做个人网站的步骤wordpress 添加新页面
  • 公司建网站流程网站布局选择
  • 云南效果好的网站优化微信如何做有趣的短视频网站
  • wordpress个人网站后台登陆dedecms仿站
  • 网站没被收录什么原因上海哪家做网站
  • 电子商务网站建设含代码项目外包是什么意思
  • 此网站正在建设中页面重庆网上商城网站建设公司