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