Skip to content

Instantly share code, notes, and snippets.

@softlion
Created January 25, 2016 09:59
Show Gist options
  • Save softlion/95663a3676d5df23c176 to your computer and use it in GitHub Desktop.
Save softlion/95663a3676d5df23c176 to your computer and use it in GitHub Desktop.
ActivityLifecycleCallbacksHelper to get TopActivity from anywhere
public sealed class ActivityLifecycleHelper : IDisposable
{
private readonly ActivityLifecycleCallbacksHelper activityLifecycle = new ActivityLifecycleCallbacksHelper();
private Android.App.Application application;
public Activity TopActivity { get; private set; }
public ActivityLifecycleHelper(Android.App.Application application)
{
this.application = application;
application.RegisterActivityLifecycleCallbacks(activityLifecycle);
activityLifecycle.ActivityResumed += (sender, args) => TopActivity = args.Activity;
activityLifecycle.ActivityPaused += (sender, args) => TopActivity = null;
activityLifecycle.ActivityDestroyed += (sender, args) => TopActivity = null;
}
public void Dispose()
{
application.UnregisterActivityLifecycleCallbacks(activityLifecycle);
TopActivity = null;
application = null;
}
}
public class ActivityLifecycleEventArgs : EventArgs
{
public Activity Activity { get; }
public Bundle State { get; }
public ActivityLifecycleEventArgs(Activity activity, Bundle state = null)
{
Activity = activity;
State = state;
}
}
public class ActivityLifecycleCallbacksHelper : Java.Lang.Object, Application.IActivityLifecycleCallbacks
{
public event EventHandler<ActivityLifecycleEventArgs> ActivityCreated;
public event EventHandler<ActivityLifecycleEventArgs> ActivityDestroyed;
public event EventHandler<ActivityLifecycleEventArgs> ActivityPaused;
public event EventHandler<ActivityLifecycleEventArgs> ActivityResumed;
public event EventHandler<ActivityLifecycleEventArgs> ActivitySaveInstanceState;
public event EventHandler<ActivityLifecycleEventArgs> ActivityStarted;
public event EventHandler<ActivityLifecycleEventArgs> ActivityStopped;
public void OnActivityCreated(Activity activity, Bundle savedInstanceState)
{
ActivityCreated?.Invoke(this, new ActivityLifecycleEventArgs(activity, savedInstanceState));
}
public void OnActivityDestroyed(Activity activity)
{
ActivityCreated?.Invoke(this, new ActivityLifecycleEventArgs(activity));
}
public void OnActivityPaused(Activity activity)
{
ActivityCreated?.Invoke(this, new ActivityLifecycleEventArgs(activity));
}
public void OnActivityResumed(Activity activity)
{
ActivityCreated?.Invoke(this, new ActivityLifecycleEventArgs(activity));
}
public void OnActivitySaveInstanceState(Activity activity, Bundle outState)
{
ActivityCreated?.Invoke(this, new ActivityLifecycleEventArgs(activity, outState));
}
public void OnActivityStarted(Activity activity)
{
ActivityCreated?.Invoke(this, new ActivityLifecycleEventArgs(activity));
}
public void OnActivityStopped(Activity activity)
{
ActivityCreated?.Invoke(this, new ActivityLifecycleEventArgs(activity));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment