Jni 报错 “JNI WARNING: threadid=1 using JNI after critical get ...”的解决方法
近日遇到这样的问题,在测试android程序时发现,在各种手机上都没有问题,唯独在使用某一品牌的平板电脑时就报如下错误
signal 11 (SIGSEGV), fault addr deadd00d
查看log发现,Jni报了一个WARNING
JNI WARNING: threadid=1 using JNI after critical get ...
这个错误为Jni使用错误
比如这样是不允许的
float * pSrc = (float *)env->GetPrimitiveArrayCritical(src, 0);
float * pDst = (float*)env->GetDirectBufferAddress( dst );
env->ReleasePrimitiveArrayCritical(src, pSrc, 0
必须要改成这样
float* pDst = (float*)env->GetDirectBufferAddress( dst );
float* pSrc = (float*)env->GetPrimitiveArrayCritical(src, 0);
env->ReleasePrimitiveArrayCritical(src, pSrc, 0);
也就是说,在GetPrimitiveArrayCritical和ReleasePrimitiveArrayCritical之间不能再调用其他Jni的函数
而且这种情况只会在特定的设备或者模拟器里才会出现,情况比较特殊,需要注意。
Jni 报错 “JNI WARNING: threadid=1 using JNI after critical get ...”
最新推荐文章于 2021-07-30 13:49:37 发布