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从线程解绑定,不然会造成野指针



 

posted @ 2017-07-11 10:47  清澈见底  阅读(520)  评论(0编辑  收藏  举报