我通常从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/

10-10 16:20