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从线程解绑定,不然会造成野指针
---------------------
转载,原文如下链接
原文:https://blog.csdn.net/jiabailong/article/details/74940849