【Android JNI之JAVA与C++对象建立对称关联(JNI优化设计,确保JNI调用的稳定性)】仓廪实则知礼节,衣食足则知荣辱。这篇文章主要讲述Android JNI之JAVA与C++对象建立对称关联(JNI优化设计,确保JNI调用的稳定性)相关的知识,希望能为你提供帮助。
转载请声明:原文转自:http://www.cnblogs.com/xiezie/p/5930503.html
android JNI之java与C++对象建立对称关联
1.JAVA对象持有C++对象的指针
- 在JAVA类中创建一个int类型的变量(如int mObj),用于储存C++对象的指针
- 在创建C++对象(如MyCPlusObj)的本地方法中,将C++对象的指针存入JAVA变量中(mObj)
JNIEXPORT void JNICALL Java_nativeMethod (JNIEnv *env, jobject thiz) { MyCPlusObj *obj = new MyCPlusObj(); jclass clazz = (jclass)(*env).GetObjectClass(thiz); jfieldID fid = (jfieldID)(*env).GetFieldID(clazz, "mObj", "I"); (*env).SetIntField(thiz, fid, (jint)obj); }
- 如果要取得C++对象,则通过mObj的获取C++对象的指针
jclass objClazz = (jclass)env-> GetObjectClass(obj); //obj为对应的JAVA对象 jfieldID fid = env-> GetFieldID(objClazz, "mObj", "I"); jlong p = (jlong)env-> GetObjectField(obj, fid); MyCPlusObj *cPlusObj = (MyCPlusObj *)p; //cPlusObj 为JAVA对象对应的C++对象
2.C++对象持有JAVA对象的引用
- 在C++类中创建一个jint类型的变量(如jint mObj),用于储存JAVA对象的引用
- 在创建C++对象时,储存JAVA对象的引用
jobject gThiz = (jobject)env-> NewGlobalRef(thiz); //thiz为JAVA对象 (*obj).javaObj = (jint)gThiz;
推荐阅读
- 在Android Studio中使用lambda表达式
- JS事件和事件处理器 – JavaScript教程
- 在chromev8中的JavaScript事件循环分析
- 基于区块链技术的超级账本(Hyperledger) - 从理论到实战
- ELT.ZIP《CCF开源高校行第一期》观后感
- OpenHarmony-内核对象事件之源码详解
- Elasticsearch掰开揉碎第3篇windows环境搭建
- Scala入门详解
- Redis 缓存击穿(失效)缓存穿透缓存雪崩怎么解决()