Android之jni解决JNIEnv跨线程问题
生活随笔
收集整理的這篇文章主要介紹了
Android之jni解决JNIEnv跨线程问题
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1、問(wèn)題
JNIEnv是一個(gè)線程相關(guān)的變量 JNIEnv 對(duì)于每個(gè) thread 而言是唯一的 JNIEnv *env指針不可以為多個(gè)線程共用
2、解決辦法
java虛擬機(jī)的JavaVM指針是整個(gè)jvm公用的,我們可以用JavaVM來(lái)得到當(dāng)前線程的JNIEnv指針,可以使用javaAttachThread保證取得當(dāng)前線程的Jni環(huán)境變量 下面的寫法是cpp文件 JavaVM *g_jvm = NULL; jobject g_obj = NULL; //由java調(diào)用來(lái)建立JNI環(huán)境 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;}//找到對(duì)應(yīng)的類cls = env->GetObjectClass(g_obj);if(cls == NULL){go
總結(jié)
以上是生活随笔為你收集整理的Android之jni解决JNIEnv跨线程问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android之jni编译出现no ma
- 下一篇: Android之运行Java.lang.