NDK中可靠的獲取JNIEnv*的方法


使用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了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM