Friday, June 14, 2019

Android에서 앱의 Foreground와 Background 상태 확인하기

Android에서 앱의 Foreground와 Background 상태 확인하기

Android 애플리케이션을 개발하다 보면, 앱이 foreground인지 background인지 확인 후 그에 맞는 동작을 해야 할 때가 있습니다. 특히나 FCM에서 이 기능이 필요하게 됩니다.

그런데 이를 공식적으로 지원하는 방법이 없어서 개발자마다 제각각의 방법을 사용하고 있습니다. 이 중에서 아주 간단하게 클래스로 확인할 수 있는 방법을 소개합니다.

Foreground 및 Background 상태 확인 클래스 생성

아래와 같은 클래스를 만들어 줍니다:


public class Foreground implements Application.ActivityLifecycleCallbacks {

    private static Foreground instance;
    
    public static void init(Application app) {
        if (instance == null) {
            instance = new Foreground();
            app.registerActivityLifecycleCallbacks(instance);
        }
    }

    public static Foreground get() {
        return instance;
    }

    private Foreground() {}

    private AppStatus mAppStatus;

    public AppStatus getAppStatus() {
        return mAppStatus;
    }

    // check if app is in the background
    public boolean isBackground() {
        return mAppStatus.ordinal() == AppStatus.BACKGROUND.ordinal();
    }

  
   public enum AppStatus {
       BACKGROUND, // app is in the background
       RETURNED_TO_FOREGROUND, // app returned to foreground(or first launch)
       FOREGROUND; // app is in the foreground
   }


   // running activity count
   private int running = 0;

   @Override 
   public void onActivityCreated(Activity activity, Bundle bundle) {}

   @Override 
   public void onActivityStarted(Activity activity) {
       if (++running == 1) {
           mAppStatus = AppStatus.RETURNED_TO_FOREGROUND;
       } else if (running > 1) { 
           mAppStatus = AppStatus.FOREGROUND; 
       }
   }

   
  @Override 
  public void onActivityResumed(Activity activity) {}

  
  @Override 
  public void onActivityPaused(Activity activity) {}


  
  @Override
  public void onActivityStopped(Activity activity) { 
      if (--running == 0){
          mAppStatus = Appstatus.BACKGROUND; 
      } 

      
     @Override 
     public void onActivitySaveInstanceState(Activity activity, Bundle bundle){}


     @Override
     Public void on ActivityDestroyed (Activity Activity){}
}

사용 방법

[STEP1]: Application을 상속받은 클래스에서 onCreate() 메소드 부분에 Foreground.init(this);를 추가합니다.

[STEP2]: 사용하고 싶은 곳에서 Foreground.isBackground()를 사용하면 됩니다.


0 개의 댓글:

Post a Comment