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