Skip to content

Instantly share code, notes, and snippets.

@thsaravana
Last active March 2, 2020 04:24
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thsaravana/1fa576b6af9fc8fff20acfb2ac79fa1b to your computer and use it in GitHub Desktop.
Save thsaravana/1fa576b6af9fc8fff20acfb2ac79fa1b to your computer and use it in GitHub Desktop.
Used to identify when the app goes to foreground or background
public final class AppTransitionStatus implements Application.ActivityLifecycleCallbacks {
private static final long MAX_BACKGROUND_TIME = 2000;
private Timer timer;
private TimerTask task;
private boolean isBackground = true;
private final Transition transition;
public AppTransitionStatus(@NonNull Transition transition) {
this.transition = transition;
}
@Override
public void onActivityPaused(Activity activity) {
timer = new Timer();
task = new TimerTask() {
public void run() {
isBackground = true;
goToBackground();
}
};
timer.schedule(task, MAX_BACKGROUND_TIME);
}
@Override
public void onActivityResumed(Activity activity) {
if (isBackground) {
goToForeground();
}
stopTimer();
isBackground = false;
}
private void stopTimer() {
if (task != null) task.cancel();
if (timer != null) timer.cancel();
}
private void goToForeground() {
transition.appToForeground();
}
private void goToBackground() {
transition.appToBackground();
}
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
// unused but required to implement ActivityLifecycleCallbacks
}
@Override
public void onActivityStarted(Activity activity) {
// unused but required to implement ActivityLifecycleCallbacks
}
@Override
public void onActivityStopped(Activity activity) {
// unused but required to implement ActivityLifecycleCallbacks
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
// unused but required to implement ActivityLifecycleCallbacks
}
@Override
public void onActivityDestroyed(Activity activity) {
// unused but required to implement ActivityLifecycleCallbacks
}
public interface Transition {
void appToForeground();
void appToBackground();
}
}
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new AppTransitionStatus(new Transition() {
@Override
public void appToForeground() {
Log.d("Transition", "App in Foreground");
}
@Override
public void appToBackground() {
Log.d("Transition", "App in Background");
}
}));
}
}
@thsaravana
Copy link
Author

The above piece of code is inspired by https://stackoverflow.com/a/15573121/4747587

@r4jiv007
Copy link

r4jiv007 commented Oct 5, 2017

please set default value of isBackground to true, appToForeground() is not getting called the first time.

@thsaravana
Copy link
Author

You no longer need to do all this. There is an easier way: https://gist.github.com/thsaravana/d585caa69f9eae876123d36c5c0e095f

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment