Android JNI全局参考的微妙之处



好了,根据Cpp

的步骤
  • 使用jni创建字典
  • 使字典的job对象返回为一个globalref
  • 使用jni调用返回对象的Java方法(我们将此对象称为* a *)
  • *A*添加到字典中,而不使ref *A*全局

*A*的寿命是多少?

我的期望如下。字典本身是全局的,因此受到垃圾收集的保护,当我从jni *A*调用'Add'方法时被传递回java',然后字典将保存对它的新引用,保护它也免受垃圾收集。所以我希望*A*和字典一样长(忽略外部干扰)。

我讲对了吗?谢谢。

当我从jni 调用'Add'方法时,A被传递回' java',然后字典将保存对它的新引用,保护它不受垃圾收集。

。您正在合并本地引用和全局引用的两个属性。本地引用仅在创建它的JNI调用期间有效。在那之后,它就无效了。如果您想在随后的JNI调用中再次使用它,请将其设置为GlobalRef.

所以我希望A和字典一样长(忽略外部干扰)。

可以,但是引用本身已经无效,所以无论如何你都不能使用它。

最新更新