我有一个基于 SDK/NDK 的应用程序,它创建本机缓冲区,然后将数据读/写到那里以通过 JNI 桥进行通信。在 4.4 (DALVIK) 中,它运行正常 - 或者至少它没有抛出异常。一旦 ART 成为强制性的,即 Lollipop - 它现在在应用程序关闭/退出时失败。在此处创建直接缓冲区:
JNIEXPORT void JNICALL Java_com_class_nativeOnDirect(JNIEnv* jenv, jobject obj, jobject m, jobject mv){
GLubyte* _dData;
_dData = (GLubyte*)jenv->GetDirectBufferAddress(m);
}
清除直接数据:
JNIEXPORT void JNICALL Java_com_class_nativeOnFreeNativeBuffer(JNIEnv* jenv, jobject obj, jobject m){
jenv->DeleteGlobalRef(m);
}
经过对此的一些研究 - 我仍然不清楚为什么会发生这种情况。顺便说一句 - 如果“DeleteGlobalref(jobjct) 没有发生 - 不会引发异常。害怕这里发生内存泄漏。提前致谢