Created
January 24, 2018 15:57
-
-
Save berkus/4c297eaf1b8d4509391643b5ed170c3b to your computer and use it in GitHub Desktop.
Application Backgrounding And Foregrounding Tracking
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // Usually these are added as private fields somewhere in Application class | |
| /** | |
| * Handle application foregrounding. | |
| */ | |
| private final class LifecycleListener implements Application.ActivityLifecycleCallbacks { | |
| private Application application; | |
| LifecycleListener(Application app) { | |
| application = app; | |
| application.registerActivityLifecycleCallbacks(this); | |
| logger.d("Subscribed to ActivityLifecycleCallbacks"); | |
| } | |
| void unregister() { | |
| application.unregisterActivityLifecycleCallbacks(this); | |
| application = null; | |
| logger.d("Unsubscribed from ActivityLifecycleCallbacks"); | |
| } | |
| private void checkForegrounded() { | |
| if (wasBackgrounded && !isDisposed) { | |
| logger.d("Application foregrounded"); | |
| wasBackgrounded = false; | |
| reconnect(nativeHandle); | |
| } | |
| } | |
| @Override | |
| public void onActivityCreated(Activity a, Bundle b) { | |
| checkForegrounded(); | |
| } | |
| @Override | |
| public void onActivityStarted(Activity a) { | |
| checkForegrounded(); | |
| } | |
| @Override | |
| public void onActivityResumed(Activity a) { | |
| checkForegrounded(); | |
| } | |
| @Override | |
| public void onActivityPaused(Activity a) { | |
| // ignored | |
| } | |
| @Override | |
| public void onActivityStopped(Activity a) { | |
| // ignored | |
| } | |
| @Override | |
| public void onActivityDestroyed(Activity a) { | |
| // ignored | |
| } | |
| @Override | |
| public void onActivitySaveInstanceState(Activity a, Bundle b) { | |
| // ignored | |
| } | |
| } | |
| /** | |
| * Handle application backgrounding. | |
| */ | |
| private final class LifecycleListener2 implements ComponentCallbacks2 { | |
| private Application application; | |
| LifecycleListener2(Application app) { | |
| application = app; | |
| application.registerComponentCallbacks(this); | |
| logger.d("Subscribed to ComponentCallbacks2"); | |
| } | |
| void unregister() { | |
| application.unregisterComponentCallbacks(this); | |
| application = null; | |
| logger.d("Unsubscribed from ComponentCallbacks2"); | |
| } | |
| @Override | |
| public void onConfigurationChanged(final Configuration newConfig) { | |
| // ignored | |
| } | |
| @Override | |
| public void onLowMemory() { | |
| // ignored | |
| } | |
| @Override | |
| public void onTrimMemory(final int level) { | |
| if (level == ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) { | |
| wasBackgrounded = true; | |
| logger.d("Application backgrounded"); | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment