Android版Mono中的JNIHandle所有权
有人能给我解释一下Mono for Android中三个枚举值的确切含义吗?它们之间的区别是什么?我很抱歉没有更新类库文档 文档说明了本节中各种Android版Mono中的JNIHandle所有权,android,xamarin.android,Android,Xamarin.android,有人能给我解释一下Mono for Android中三个枚举值的确切含义吗?它们之间的区别是什么?我很抱歉没有更新类库文档 文档说明了本节中各种JniHandleOwnership值的含义 根据评论更新: 如果不应对句柄参数执行任何操作,则应使用JniHandleOwnership.DoNotTransfer。这应该始终在内部使用 当您有一个本地引用(例如,您调用了JNIEnv.CallObjectMethod(),它返回一个本地引用)并且希望将本地引用的所有权传递给包装器时,应该使用JniH
JniHandleOwnership
值的含义
根据评论更新:
- 如果不应对
参数执行任何操作,则应使用句柄
。这应该始终在内部使用JniHandleOwnership.DoNotTransfer
- 当您有一个本地引用(例如,您调用了
,它返回一个本地引用)并且希望将本地引用的所有权传递给包装器时,应该使用JNIEnv.CallObjectMethod()
JniHandleOwnership.TransferLocalRef
- 当您拥有全局引用并且希望将全局引用的所有权传递给包装器时,应使用
:JniHandleOwnership.TransferGlobalRef
IntPtr grefFoo = JNIEnv.FindClass("Foo"); // FindClass() returns a gref var Foo = Java.Lang.Object.GetObject<Java.Lang.Class>(grefFoo, JniHandleOwnership.TransferGlobalRef);
IntPtr grefFoo=JNIEnv.FindClass(“Foo”);//FindClass()返回一个gref var Foo=Java.Lang.Object.GetObject(grefFoo、JniHandleOwnership.TransferGlobalRef);
TransferGlobalRef
?因为您有一个全局ref,并且希望“传递所有权”,这样您就不必担心它:IntPtr grefFoo=JNIEnv.FindClass(“Foo”);/*FindClass()返回一个gref*/var Foo=Java.Lang.Object.GetObject(grefFoo,JniHandleOwnership.TransferGlobalRef);找到了这个链接,这可能会让整个事情更清楚一些: