欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > Android >内容正文

Android

Android之jni解决JNIEnv跨线程问题

发布时间:2023/12/4 Android 53 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Android之jni解决JNIEnv跨线程问题 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1、问题

 

JNIEnv是一个线程相关的变量 JNIEnv 对于每个 thread 而言是唯一的  JNIEnv *env指针不可以为多个线程共用  

 

 

 

2、解决办法

 

java虚拟机的JavaVM指针是整个jvm公用的,我们可以用JavaVM来得到当前线程的JNIEnv指针,可以使用javaAttachThread保证取得当前线程的Jni环境变量   下面的写法是cpp文件 JavaVM *g_jvm = NULL; jobject g_obj = NULL; //由java调用来建立JNI环境 JNIEXPORT void Java_****_setJNIEnv( JNIEnv* env, jobject obj){//保存全局JVM以便在子线程中使用env->GetJavaVM(&g_jvm);//不能直接赋值(g_obj = obj)g_obj = env->NewGlobalRef(obj);} //线程里面JNIEnv *env;jclass cls;jmethodID mid;//Attach主线程if(g_jvm->AttachCurrentThread(&env, NULL) != JNI_OK){return NULL;}//找到对应的类cls = env->GetObjectClass(g_obj);if(cls == NULL){go

总结

以上是生活随笔为你收集整理的Android之jni解决JNIEnv跨线程问题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。