Last active
March 2, 2020 04:24
-
-
Save thsaravana/1fa576b6af9fc8fff20acfb2ac79fa1b to your computer and use it in GitHub Desktop.
Used to identify when the app goes to foreground or background
This file contains 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
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(); | |
} | |
} |
This file contains 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
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"); | |
} | |
})); | |
} | |
} |
please set default value of isBackground to true, appToForeground() is not getting called the first time.
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
The above piece of code is inspired by https://stackoverflow.com/a/15573121/4747587