JNI全局对象,及原生线程JNIENV传递

JNIENV *env 无法在多线程之间进行传递,这时就需要为原生线程生成新的JNIENV指针

需要先保存一个JavaVM的全局变量。如果需要保存Java全局对象则需要创建一个全局的jobject对象。

 
  
JavaVM *g_jvm = NULL;
jobject g_obj = NULL;


env->GetJavaVM(&g_jvm) ;
JNIENV*env
//Attach主线程
if (g_jvm->AttachCurrentThread(&env, NULL) != JNI_OK) {
    LOGE("%s: AttachCurrentThread() failed", __FUNCTION__);
    return NULL;
}

g_obj = env->NewGlobalRef(job);
env->DeleteLocalRef(g_obj);//使用完一定要释放,不然会造成内存泄漏
g_jvm->DetachCurrentThread();//一定要报JNIENV从线程解绑定,不然会造成野指针



你可能感兴趣的:(JNI全局对象,及原生线程JNIENV传递)