Skip to content

Instantly share code, notes, and snippets.

@berkus
Created January 24, 2018 15:57
Show Gist options
  • Select an option

  • Save berkus/4c297eaf1b8d4509391643b5ed170c3b to your computer and use it in GitHub Desktop.

Select an option

Save berkus/4c297eaf1b8d4509391643b5ed170c3b to your computer and use it in GitHub Desktop.
Application Backgrounding And Foregrounding Tracking
// 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