JNI相关的调查结果小计

1、JNI中也可以获取Java数组的Size:
env->GetArrayLength(jarray array);

2、普通的native方法中,产生的jni对象都是属于局部引用(local reference),在native方法中超出作用域就会自动析构,所以不用专门释放(只针对jni对象)。除非在C++中使用了static定义了全局引用。那需要用ReleaseGolbalRef来进行释放。

3、不管是返回数组或对象,只要将这个返回的对象构造出来并赋了想要的值并返回就行了,对该对象本身不要释放。其它的临时jni对象需要释放掉。
如果是返回数组,可以使用(*jniEnv)->ReleaseByteArrayElements(ByteArray arr, byte* array, jint mode); 来更新返回的数组的同时,释放本地的C++数组。(这里的mode要设为0,表示对java数组更新并释放C++数组)。
具体怎么做请你们自己调查下。

数组的操作可以参考这个贴子:
http://blog.csdn.net/jiangwei0910410003/article/details/17653803

猜你喜欢

转载自hwei199.iteye.com/blog/2245922