2012-03-30 14 views

Antwort

2

Ich entschuldige mich, dass ich die Dokumentation der Klassenbibliothek noch nicht aktualisiert habe.

Die Binding Android Types Dokumentation gibt an, was die verschiedenen JniHandleOwnership Werte im Wrapping with Java.Lang.Object Abschnitt bedeuten.

aktualisiert basierend auf Kommentare:

  • JniHandleOwnership.DoNotTransfer soll, wenn nichts verwendet werden soll, mit dem handle Parameter erfolgen. Dies sollte immer innerhalb connector methods verwendet werden.
  • sollte verwendet werden, wenn Sie eine lokale Referenz haben (z.
  • JniHandleOwnership.TransferGlobalRef sollte verwendet werden, wenn Sie eine globale Referenz haben, und Sie wollen einen Wrapper Eigentum an der globalen Referenz zu übergeben:

    IntPtr grefFoo = JNIEnv.FindClass("Foo"); // FindClass() returns a gref 
    var Foo = Java.Lang.Object.GetObject<Java.Lang.Class>(grefFoo, JniHandleOwnership.TransferGlobalRef); 
    
+0

ich immer noch nicht ganz verstehen. Ist diese Definition richtig? DoNotTransfer: Ref manuell löschen | TransferLocalRef: Ref wurde im Konstruktor | gelöscht TransferGlobalRef: Ref in Destruktor/Finalizer | gelöscht Warum sollte ich die Referenz behalten wollen (d. H. Warum sollte ich TransferGlobalRef benutzen)? –

+0

Warum möchten Sie 'TransferGlobalRef' verwenden? Weil Sie einen globalen Verweis haben und Sie den Besitz "übergeben" wollen, damit Sie sich darüber keine Gedanken machen müssen: IntPtr grefFoo = JNIEnv.FindClass ("Foo");/* JNIEnv.FindClass() gibt ein gref */var zurück Foo = Java.Lang.Object.GetObject (grefFoo, JniHandleOwnership.TransferGlobalRef); – jonp

+0

Diesen Link gefunden, der das Ganze ein wenig mehr verdeutlichen kann: http://www.netmite.com/android/mydroid/dalvik/docs/jni-tips.html#local_vs_global_references –

Verwandte Themen