我通常从Java处理字符串的JNI代码如下:
jboolean isCopy_something;
const char* something=env->GetStringUTFChars(somethingFromJava,&isCopy_something);
if(isCopy_something==JNI_TRUE){
env->ReleaseStringUTFChars(somethingFromJava,something);
}
我认为,如果我需要为Java中的每个字符串额外增加一个jboolean,它会严重影响代码的可读性,除了jboolean外,我还需要一个if else语句来包装ReleaseStringUTFChars。
我记得我看到一些只传递NULL而不是isCopy地址的代码。
我可以在不检查android中的isCopy的情况下调用ReleaseStringUTFChars吗?
我搜索了一些有关isCopy字段的文章,但仍然不太真正了解ReleaseStringUTFChars中isCopy字段的功能:isCopy何时会变为JNI_TRUE,何时会变为JNI_FALSE?是否取决于平台?还是取决于运行时条件?或其他情况?
最佳答案
从来没有必要。
-Java本机接口(interface)。程序员指南和规范。 1999。盛亮。
— Andriod Developer JNI Tips
而且,每次成功调用GetStringUTFChars时,您始终必须调用ReleaseStringUTFChars。
关于java - 在Android中,isCopy字段始终是必需的吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30992989/