From 967297bf7f9d1ea38effec81e66b6661f46c4437 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Wed, 20 Mar 2019 16:37:54 -0500 Subject: [PATCH] Use IActivityLifecycleCallbacks to remove static ref to Activity (#29) It feels a bit hairy to hold onto an `Activity` instance that could get destroyed. This registers an `IActivityLifecycleCallbacks` listener to null out this reference. --- glidex.forms/Forms.cs | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/glidex.forms/Forms.cs b/glidex.forms/Forms.cs index 1a8a0c5..67f8690 100644 --- a/glidex.forms/Forms.cs +++ b/glidex.forms/Forms.cs @@ -1,4 +1,5 @@ using Android.App; +using Android.OS; using System; namespace Android.Glide @@ -8,8 +9,9 @@ namespace Android.Glide /// public static class Forms { - internal static Activity Activity { get; private set; } + internal static Activity Activity { get; set; } + static readonly ActivityLifecycle lifecycle = new ActivityLifecycle (); /// /// Initializes glidex.forms, put this after your `Xamarin.Forms.Forms.Init (this, bundle);` call. @@ -30,6 +32,7 @@ public static void Init (Activity activity, bool debug = false) { Activity = activity; IsDebugEnabled = debug; + activity.Application.RegisterActivityLifecycleCallbacks (lifecycle); } /// @@ -52,5 +55,27 @@ internal static void Debug (string format, params object [] args) if (IsDebugEnabled) Util.Log.Debug (Tag, format, args); } + + class ActivityLifecycle : Java.Lang.Object, Application.IActivityLifecycleCallbacks + { + public void OnActivityCreated (Activity activity, Bundle savedInstanceState) { } + + public void OnActivityDestroyed (Activity activity) + { + if (Activity == activity) { + Activity = null; + } + } + + public void OnActivityPaused (Activity activity) { } + + public void OnActivityResumed (Activity activity) { } + + public void OnActivitySaveInstanceState (Activity activity, Bundle outState) { } + + public void OnActivityStarted (Activity activity) { } + + public void OnActivityStopped (Activity activity) { } + } } } \ No newline at end of file