Android NDK JNI共享变量是否可能?

时间:2013-04-11 15:51:56

标签: android sdk android-ndk java-native-interface

我想将JNI方法的进度更新为Progress Bar。在没有创建多个工作线程的情况下,我能想到的最简单的方法是在ProgressBar活动中使用共享变量,然后如果我得到正确的地址指针,我就会更新JNI方法中的共享变量。可能吗?或者我还需要考虑其他事情吗?

可见

static long int _PROGRESS = 0; 

我想从本机方法调用中获取此变量,例如

JNI_EXPORT java_com_example(env, jobject......){
for loop{
   //do something
  _PROGRESS++; }}

如何才能最好地制作指向共享变量的指针?或者每次发生更新时都必须返回,我想避免这种给定的JNI调用开销。

1 个答案:

答案 0 :(得分:0)

根据Java规则,它必须是类静态变量。 Java中的全局范围中没有变量。

要更新C侧的其中一个,请使用JNIEnv::SetStaticLongField()。要读取当前值,请使用GetStaticLongField()。通过JNI没有直接的变量访问。

请注意,long int不是Java中的有效数据类型。 long是。并且它与C侧的jlong相对应, 与C long相同。