JNI学习记录1-初建JNI工程
JNI学习记录2-local refence崩溃问题
JNI学习记录3-String and Array
JNI学习记录4-Fields
JNI学习记录5-Methods
http://www.eoeandroid.com/forum.php?mod=viewthread&tid=84151&_dsign=ce27c1ec
崩溃1
02-21 10:53:41.627 31176-31176/com.sample.zhanganl.ndkjnidemo3 A/libc: stack corruption detected
02-21 10:53:41.627 31176-31176/com.sample.zhanganl.ndkjnidemo3 A/libc: Fatal signal 6 (SIGABRT) at 0x000079c8 (code=-6), thread 31176 (anl.ndkjnidemo3)
原因:字符串长度有上限?
然而,在循环调用本地接口时,没有 env->ReleaseStringUTFChars(aa, bb); 是不会影响到崩溃的。
有两种方式让LocalRef无效,一,native method返回,JavaVM自动释放LocalRef;二,
用DeleteLocalRef主动释放。
http://blog.csdn.net/likuan0214/article/details/52671098
http://blog.csdn.net/zerokkqq/article/details/54944422
[Android JNI局部引用表溢出:local reference table overflow (max=512)]
http://blog.csdn.net/xyang81/article/details/44873769
// 保证至少可以创建3个局部引用(str_array,cls_string,obj_str)
if ((*env)->EnsureLocalCapacity(env, 3) != JNI_OK) {
return NULL;
}
当local reference 过多导致local reference table overflow (max=512)时,在使用每个local reference之前,最好先判断有没有足够的能力。
另外,
jclass jcls;//需要DeleteLocalRef
jobject jcls;//需要DeleteLocalRef
jstring jcls;//需要ReleaseStringUTFChars DeleteLocalRef
jarray jcls;//需要DeleteLocalRef
jmethodid jfieldid//不需要DeleteLocalRef