簡體   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