diff options
Diffstat (limited to 'Xamarin.Forms.Platform.Android')
-rw-r--r-- | Xamarin.Forms.Platform.Android/VisualElementPackager.cs | 7 | ||||
-rw-r--r-- | Xamarin.Forms.Platform.Android/VisualElementTracker.cs | 24 |
2 files changed, 24 insertions, 7 deletions
diff --git a/Xamarin.Forms.Platform.Android/VisualElementPackager.cs b/Xamarin.Forms.Platform.Android/VisualElementPackager.cs index e6db1c6a..891d4383 100644 --- a/Xamarin.Forms.Platform.Android/VisualElementPackager.cs +++ b/Xamarin.Forms.Platform.Android/VisualElementPackager.cs @@ -33,8 +33,15 @@ namespace Xamarin.Forms.Platform.Android public void Dispose() { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { if (_disposed) return; + _disposed = true; if (_renderer != null) diff --git a/Xamarin.Forms.Platform.Android/VisualElementTracker.cs b/Xamarin.Forms.Platform.Android/VisualElementTracker.cs index 2b9815d3..7ade4596 100644 --- a/Xamarin.Forms.Platform.Android/VisualElementTracker.cs +++ b/Xamarin.Forms.Platform.Android/VisualElementTracker.cs @@ -45,18 +45,28 @@ namespace Xamarin.Forms.Platform.Android public void Dispose() { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { if (_disposed) return; - _disposed = true; - SetElement(_element, null); + _disposed = true; - if (_renderer != null) + if (disposing) { - _renderer.ElementChanged -= RendererOnElementChanged; - _renderer.ViewGroup.RemoveOnAttachStateChangeListener(AttachTracker.Instance); - _renderer = null; - _context = null; + SetElement(_element, null); + + if (_renderer != null) + { + _renderer.ElementChanged -= RendererOnElementChanged; + _renderer.ViewGroup.RemoveOnAttachStateChangeListener(AttachTracker.Instance); + _renderer = null; + _context = null; + } } } |