Java Android JNI注册表项:对所有内容调用一次,或对每个函数调用一次 在Android环境中使用JNI的代码>注册>()/Cuff>函数的习惯示例是定义一个带有所有C++函数的数组,并调用一次代码>注册()/。但是,如果我对每个函数调用一次RegisterNatives(),每次使用一个方法的数组大小,该怎么办?对比示例(没有编译这些示例,事实上我只是快速键入了它们,因此请原谅任何错误):

Java Android JNI注册表项:对所有内容调用一次,或对每个函数调用一次 在Android环境中使用JNI的代码>注册>()/Cuff>函数的习惯示例是定义一个带有所有C++函数的数组,并调用一次代码>注册()/。但是,如果我对每个函数调用一次RegisterNatives(),每次使用一个方法的数组大小,该怎么办?对比示例(没有编译这些示例,事实上我只是快速键入了它们,因此请原谅任何错误):,java,android,c++,java-native-interface,Java,Android,C++,Java Native Interface,一次调用,多个函数(惯用用例): //假设已经定义了静态函数'add'和'sub' jclass clazz=env->FindClass(“com/company/MyJavaClass”); 向量方法{ {“添加”、“(II)I”、(void*)和添加}, {“sub”、“(II)I”、(void*)和sub}, }; env->RegisterNatives(clazz,methods.data(),methods.size()); 多个调用,每个调用一个函数: //假设已经定义了静态函

一次调用,多个函数(惯用用例):

//假设已经定义了静态函数'add'和'sub'
jclass clazz=env->FindClass(“com/company/MyJavaClass”);
向量方法{
{“添加”、“(II)I”、(void*)和添加},
{“sub”、“(II)I”、(void*)和sub},
};
env->RegisterNatives(clazz,methods.data(),methods.size());
多个调用,每个调用一个函数:

//假设已经定义了静态函数'add'和'sub'
jclass clazz=env->FindClass(“com/company/MyJavaClass”);
std::向量方法1{
{“添加”、“(II)I”、(void*)和添加},
};
环境->注册表项(clazz,methods1.data(),methods1.size());
std::向量方法2{
{“sub”、“(II)I”、(void*)和sub},
};
环境->注册表项(clazz,methods2.data(),methods2.size());
除了语法之外,两者之间还有什么区别吗?我不确定这是否存在性能问题,或者这是否是允许的。我在JNI文档中没有看到任何明确禁止它的内容


<>上下文,我之所以要这样做是因为我正在编写一些方便的包装器,这些方法把C++方法映射到java <代码>本地< /Calp>方法,如果我立即注册每个单独的方法,而不是构建一个容器并在以后注册该容器,那么这样做就容易多了。

一次又一次地调用RegisterNatives没有问题。

一次又一次地调用RegisterNatives没有问题。

我走了这条路线,并没有注意到明显的性能影响。我走这条路,没有发现明显的性能影响。