Android NDK JNI共享变量有可能吗?

lillo 发布于 2019-03-09 android 最后更新 2019-03-09 14:32 3 浏览

我想将JNI方法的进度更新到进度条。我可以想到的最简单的方法是不用创建多个工作线程,而是在ProgressBar活动中共享变量,然后如果我得到正确的地址指针,我只需更新我的JNI方法中的共享变量。可能吗?或者我会不得不想到别的东西? 可见

static long int _PROGRESS = 0; 
我想从本地方法调用访问这个变量让我们说
JNI_EXPORT java_com_example(env, jobject......){
for loop{
   //do something
  _PROGRESS++; }}
我怎样才能最好地使共享变量的指针?或者每次更新发生时我都必须返回,我想避免给定的JNI调用开销。
已邀请:

sea

赞同来自:

根据Java规则,它必须是类静态变量。 Java中的全局范围中没有变量。 要更新C侧的其中一个,请使用JNIEnv::SetStaticLongField()。要读取当前值,请使用GetStaticLongField()。通过JNI没有直接的变量访问。 请注意,long int不是Java中的有效数据类型。 long是。并且它对应于C侧的jlong,这与C long不同。