使用NDK時,幾乎任何方法都需要一個JNIEnv來調用。這個類是和線程相關的,如何可靠的獲取它?
首先,作為NDK的so,必然有一個地方是由android系統調用的,這個調用將帶來一個JNIEnv參數,不要使用它,而是調用:
JNIEnv->GetJavaVM(&g_javaVM);
獲取一個JavaVM類型變量。
接着在需要使用JNIEnv的時候調用
int status;
JNIEnv* _jniEnv = NULL;
status = g_javaVM->GetEnv((void **)&_jniEnv, JNI_VERSION_1_6);
if(status < 0)
{
status = g_javaVM->AttachCurrentThread(&_jniEnv, NULL);
if(status < 0)
{
_jniEnv = NULL;
}
}
即可可靠的得到jnienv了。
