/// <summary> /// Try to garbage collect <paramref name="value"/>. /// </summary> /// <returns> /// <c>true</c>, if <paramref name="value"/> was collected and /// <paramref name="handle"/> is invalid; otherwise <c>false</c>. /// </returns> /// <param name="value"> /// The <see cref="T:Java.Interop.IJavaPeerable"/> instance to collect. /// </param> /// <param name="handle"> /// The <see cref="T:Java.Interop.JniObjectReference"/> of <paramref name="value"/>. /// This value may be updated, and <see cref="P:Java.Interop.IJavaObject.PeerReference"/> /// will be updated with this value. /// </param> internal protected virtual bool TryGC(IJavaPeerable value, ref JniObjectReference handle) { if (!handle.IsValid) { return(true); } var wgref = handle.NewWeakGlobalRef(); JniObjectReference.Dispose(ref handle); JniGC.Collect(); handle = wgref.NewGlobalRef(); JniObjectReference.Dispose(ref wgref); return(!handle.IsValid); }
public JniWeakGlobalReference NewWeakGlobalRef() { var r = new JniObjectReference(DangerousGetHandle(), ReferenceType); return(new JniWeakGlobalReference(r.NewWeakGlobalRef().Handle)); }