释放android JNI中的本地引用

时间:2012-05-29 11:07:37

标签: android android-ndk

在我编写的android代码的jni层中,我将一个数组从jni层返回到java层。我在传递结果之前使用DeleteLocalRef()来释放本地引用。我只是想确保我写的代码是正确的。请找到下面的代码。感谢任何帮助。

extern "C"
{
JNIEXPORT jbyteArray JNICALL Java_com_jni_btRead(JNIEnv* env, jobject)
{

    unsigned char* reply = btRead();

    jbyteArray jba;
    if(reply)
    {       
        jba = env->NewByteArray(2048);
        env->SetByteArrayRegion(jba, 0, 2048, reinterpret_cast<jbyte*>(reply));
    }
    else
    {       
        jba = env->NewByteArray(0);
    }

    env->DeleteLocalRef(jba);
    return jba;
}
}

2 个答案:

答案 0 :(得分:0)

来自here的引用:

  

本地引用仅在动态上下文中有效   创建它的本机方法,并且只在一次调用中   本机方法。执行期间创建的所有本地引用   一旦本机方法返回,将释放本机方法。

因此,您可能无法释放本地参考,因为它会自动释放。

答案 1 :(得分:0)

局部变量总是在堆栈段中创建,因此在从函数返回后会被销毁。这个图可能有所帮助。

Local variable assignment