繁体   English   中英

Android JNI全球参考的细微之处

[英]Android JNI Global Reference Subtleties

好吧,鉴于从Cpp采取的以下步骤

  • 使用jni制作字典
  • 使字典的jobject返回到globalref
  • 使用jni调用返回对象的Java方法(我们将把该对象称为* A *)
  • * A *添加到字典中,而无需使* A *的引用成为全局引用

* A *的寿命是多少?

我的期望如下。 字典本身是全局的,因此受到了垃圾回收的保护,当我从jni调用“ Add”方法时* A *被传递回“ java”中,然后字典将持有对该字典的新引用,从而也保护了它免受垃圾的侵害采集。 因此,我希望* A *的持续时间与字典一样长(忽略外部干预)。

我在正确的轨道上吗? 谢谢。

当我从jni调用'Add'方法时,会将A '传递回java'中,然后字典将保留对此的新引用,从而也保护了它免受垃圾收集的侵害。

否。您正在混淆本地和全局引用的两个属性。 本地引用仅在创建它的JNI调用期间有效。此后,它无效。 如果要在后续的JNI调用中再次使用它,请将其设置为GlobalRef。

因此,我希望A的使用时间与字典一样长(忽略外部干预)。

是的,但是引用本身已经无效,因此您无论如何都无法使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM