Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import android.app.Activity;
- import android.app.Application;
- import android.content.Context;
- import android.os.Bundle;
- import android.os.Handler;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * Detects when the current application enters background or foreground and notifies its listeners.
- */
- public class BackgroundTransitionMonitor {
- public interface Listener {
- void onEnterBackground();
- void onEnterForeground();
- }
- private static final String TAG = "BackgroundTransitionMonitor";
- private static final long BACKGROUND_TRANSITION_DELAY = 500;
- private static BackgroundTransitionMonitor instance;
- private final Application application;
- private final Handler backgroundCheckHandler = new Handler();
- private final List<Listener> listeners = new ArrayList<>();
- private boolean isBackground = false;
- public static synchronized BackgroundTransitionMonitor getInstance(Context context) {
- if (instance == null) {
- instance = new BackgroundTransitionMonitor((Application) context.getApplicationContext());
- }
- return instance;
- }
- private BackgroundTransitionMonitor(Application application) {
- this.application = application;
- }
- public void addListener(Listener listener) {
- if (listeners.isEmpty()) {
- application.registerActivityLifecycleCallbacks(lifecycleCallbacks);
- }
- listeners.add(listener);
- }
- public void removeListener(Listener listener) {
- listeners.remove(listener);
- if (listeners.isEmpty()) {
- application.unregisterActivityLifecycleCallbacks(lifecycleCallbacks);
- }
- }
- private final Application.ActivityLifecycleCallbacks lifecycleCallbacks = new Application.ActivityLifecycleCallbacks() {
- @Override
- public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
- }
- @Override
- public void onActivityStarted(Activity activity) {
- }
- @Override
- public void onActivityResumed(Activity activity) {
- backgroundCheckHandler.removeCallbacks(backgroundTransitionRunnable);
- if (isBackground) {
- isBackground = false;
- for (Listener listener : listeners) {
- listener.onEnterForeground();
- }
- }
- }
- @Override
- public void onActivityPaused(Activity activity) {
- if (!isBackground) {
- backgroundCheckHandler.removeCallbacks(backgroundTransitionRunnable);
- backgroundCheckHandler.postDelayed(backgroundTransitionRunnable, BACKGROUND_TRANSITION_DELAY);
- }
- }
- @Override
- public void onActivityStopped(Activity activity) {
- }
- @Override
- public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
- }
- @Override
- public void onActivityDestroyed(Activity activity) {
- }
- };
- private final Runnable backgroundTransitionRunnable = new Runnable() {
- @Override
- public void run() {
- isBackground = true;
- for (Listener listener : listeners) {
- listener.onEnterBackground();
- }
- }
- };
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement