/// <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);
        }
Esempio n. 2
0
        public JniWeakGlobalReference NewWeakGlobalRef()
        {
            var r = new JniObjectReference(DangerousGetHandle(), ReferenceType);

            return(new JniWeakGlobalReference(r.NewWeakGlobalRef().Handle));
        }