Android JNI RegisterNatives:对所有内容调用一次,或者每个函数调用一次
Android JNI RegisterNatives: Call once with everything, or once per function
在Android 环境中使用 JNI 的RegisterNatives()
函数的惯用示例是定义一个包含所有C++函数的数组并调用RegisterNatives()
一次。但是,如果我为每个函数调用RegisterNatives()
一次,每次使用一个方法的数组大小怎么办?对比示例(没有编译这些,实际上我只是快速输入了它们,所以请原谅任何错误(:
一次调用,多个函数(惯用用例(:
// Assume static functions `add` and `sub` have been defined
jclass clazz = env->FindClass("com/company/MyJavaClass");
std::vector<JNINativeMethod> methods {
{"add", "(II)I", (void*)&add },
{"sub", "(II)I", (void*)&sub },
};
env->RegisterNatives(clazz, methods.data(), methods.size());
多次调用,每次调用一个函数:
// Assume static functions `add` and `sub` have been defined
jclass clazz = env->FindClass("com/company/MyJavaClass");
std::vector<JNINativeMethod> methods1 {
{"add", "(II)I", (void*)&add },
};
env->RegisterNatives(clazz, methods1.data(), methods1.size());
std::vector<JNINativeMethod> methods2 {
{"sub", "(II)I", (void*)&sub },
};
env->RegisterNatives(clazz, methods2.data(), methods2.size());
除了语法之外,两者之间有什么区别吗?我不确定这是否存在性能问题,或者这是否被允许。我在 JNI 文档中没有看到任何明确禁止它的内容。
对于上下文,我想这样做的原因是因为我正在编写一些方便的包装器,将C++方法映射到 Javanative
方法,如果我立即注册每个单独的方法而不是构建容器并在以后注册该容器,则这样做要容易得多。
一次又一次地调用 RegisterNatives 没有问题。
相关文章:
- 我是否需要在下一次转移时将所有权*转移回转移队列
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 在C++中一次将矢量值写入多个文件
- 循环中的条件:为什么每次都调用strlen(),而vector.size()只调用一次
- 为什么 zlib 放气初始化调用一次不起作用?
- 在一次迭代中从 txt 文件中读取多行
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- 在头文件和 cpp 文件中使用一次 #pragma 时出现结构重定义错误
- 有没有办法一次声明相同类型的多个对象,并通过一个表达式立即使用相同的右值初始化它们?
- 高级选择排序 - 在一次迭代中搜索两个元素
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 如何仅使用一次固定<<设置精度(2)?或者至少恢复到默认行为?
- 什么是仅调用一次并调用参数的控制台应用
- 如何确保用户在一行上提示输入一次时输入名字和姓氏?
- (C++)虽然循环一次不起作用,但我引入了多个变量
- 为什么我的信号处理程序只执行一次?
- 如何使用C++一次读取整个二进制文件
- 花括号使循环运行一次?
- Android JNI RegisterNatives:对所有内容调用一次,或者每个函数调用一次
- 我可以(a)不通过输入迭代器写入,或者(b)只通过一个迭代器读取一次吗?