Advertisement
Guest User

Untitled

a guest
Sep 1st, 2015
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.22 KB | None | 0 0
  1. import android.app.Activity;
  2. import android.app.Application;
  3. import android.content.Context;
  4. import android.os.Bundle;
  5. import android.os.Handler;
  6.  
  7. import java.util.ArrayList;
  8. import java.util.List;
  9.  
  10. /**
  11. * Detects when the current application enters background or foreground and notifies its listeners.
  12. */
  13. public class BackgroundTransitionMonitor {
  14. public interface Listener {
  15. void onEnterBackground();
  16. void onEnterForeground();
  17. }
  18.  
  19. private static final String TAG = "BackgroundTransitionMonitor";
  20. private static final long BACKGROUND_TRANSITION_DELAY = 500;
  21. private static BackgroundTransitionMonitor instance;
  22. private final Application application;
  23. private final Handler backgroundCheckHandler = new Handler();
  24. private final List<Listener> listeners = new ArrayList<>();
  25. private boolean isBackground = false;
  26.  
  27. public static synchronized BackgroundTransitionMonitor getInstance(Context context) {
  28. if (instance == null) {
  29. instance = new BackgroundTransitionMonitor((Application) context.getApplicationContext());
  30. }
  31. return instance;
  32. }
  33.  
  34. private BackgroundTransitionMonitor(Application application) {
  35. this.application = application;
  36. }
  37.  
  38. public void addListener(Listener listener) {
  39. if (listeners.isEmpty()) {
  40. application.registerActivityLifecycleCallbacks(lifecycleCallbacks);
  41. }
  42. listeners.add(listener);
  43. }
  44.  
  45. public void removeListener(Listener listener) {
  46. listeners.remove(listener);
  47. if (listeners.isEmpty()) {
  48. application.unregisterActivityLifecycleCallbacks(lifecycleCallbacks);
  49. }
  50. }
  51.  
  52. private final Application.ActivityLifecycleCallbacks lifecycleCallbacks = new Application.ActivityLifecycleCallbacks() {
  53. @Override
  54. public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
  55. }
  56.  
  57. @Override
  58. public void onActivityStarted(Activity activity) {
  59. }
  60.  
  61. @Override
  62. public void onActivityResumed(Activity activity) {
  63. backgroundCheckHandler.removeCallbacks(backgroundTransitionRunnable);
  64. if (isBackground) {
  65. isBackground = false;
  66. for (Listener listener : listeners) {
  67. listener.onEnterForeground();
  68. }
  69. }
  70. }
  71.  
  72. @Override
  73. public void onActivityPaused(Activity activity) {
  74. if (!isBackground) {
  75. backgroundCheckHandler.removeCallbacks(backgroundTransitionRunnable);
  76. backgroundCheckHandler.postDelayed(backgroundTransitionRunnable, BACKGROUND_TRANSITION_DELAY);
  77. }
  78. }
  79.  
  80. @Override
  81. public void onActivityStopped(Activity activity) {
  82. }
  83.  
  84. @Override
  85. public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
  86. }
  87.  
  88. @Override
  89. public void onActivityDestroyed(Activity activity) {
  90. }
  91. };
  92.  
  93. private final Runnable backgroundTransitionRunnable = new Runnable() {
  94. @Override
  95. public void run() {
  96. isBackground = true;
  97. for (Listener listener : listeners) {
  98. listener.onEnterBackground();
  99. }
  100. }
  101. };
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement