我想知道JNIEnv *
从 JNI 函数获得的生命周期AttachCurrentThread()
。考虑以下检索JNIEnv
指针的函数。
JNIEnv * RetrieveJniEnvPtr()
{
JavaVM * pJavaVM; // Assume pJavaVM is already initialized
JNIEnv * pEnv = NULL;
if(pJavaVM->GetEnv((void**)&pEnv, JNI_VERSION_1_6) != JNI_OK)
{
pJavaVM->AttachCurrentThread((void**) &pEnv, NULL);
}
return pEnv;
}
是否有与调用相关的清理调用AttachCurrentThread()
?
另外,这是一个轻量级的功能吗?RetrieveJniEnvPtr()
在同一个线程中多次调用(在这个例子中)是标准的编程实践- 还是代码应该只JNIEnv *
在线程的生命周期内检索一次?