#요약
 - ActivityLifecycleCallbacks : App의 관점에서 본 Activity
 - LifecycleObserver : Lifecycle 대리 수행
 - LifecycleOwner : Lifecycle 커스텀

1. ActivityLifecycleCallbacks
[API level 14]

     App의 Activity의 LifeCycle를 통하여 App의 현재 상태 또는 활성화 되어 있는 Activity를 알 수 있어 상황에 따라 대응 가능. 

     Application에 구현하여 통합 관리 하도록 구성


#Code

public class BaseApplication extends Application {
    private static BaseApplication mInstance = null;
    private AppStatus mAppStatus = AppStatus.FOREGROUND;

    @Override
    public void onCreate() {
        mInstance = this;
        super.onCreate();

        // Activity 라이프 사이클을 탐지하여 포그라운드와 백그라운드 체크
        registerActivityLifecycleCallbacks(new CActivityLifecycleCallbacks());
    }

    public static BaseApplication getInstance() {
        return mInstance;
    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
    }

    public AppStatus getAppStatus() {
        return mAppStatus;
    }

    public enum AppStatus {
        BACKGROUND,
        RETURNED_TO_FOREGROUND, // 홈 버튼으로 내린후 다시 실행 된 경우, 처음 실행시
        FOREGROUND,
        MEMORY_OUT; // 최근 앱 사용 목록에서 앱이 삭제 되었을 경우
    }

    public class CActivityLifecycleCallbacks implements ActivityLifecycleCallbacks {
        private int running = 0;

        @Override
        public void onActivityCreated(Activity activity, Bundle bundle) {
            CLog.e("APP onActivityCreated === " + activity.getClass().getCanonicalName());
        }

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

        @Override
        public void onActivityResumed(Activity activity) {
            CLog.e("APP onActivityResumed ===" + activity.getClass().getCanonicalName());
        }

        @Override
        public void onActivityPaused(Activity activity) {
            CLog.e("APP onActivityPaused ===" + activity.getClass().getCanonicalName());
        }

        @Override
        public void onActivityStopped(Activity activity) {
            CLog.e("APP onActivityStopped === " + activity.getClass().getCanonicalName());
            if (--running == 0) {
                mAppStatus = AppStatus.BACKGROUND;
            }
        }

        @Override
        public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
            CLog.e("APP onActivitySaveInstanceState ===" + activity.getClass().getCanonicalName());
        }

        @Override
        public void onActivityDestroyed(Activity activity) {
            CLog.e("APP onActivityDestroyed === " + activity.getClass().getCanonicalName());
            mAppStatus = AppStatus.MEMORY_OUT;
            // 메인 Activity가 Destory 된다는 것은 '최근 앱 사용 목록'에서 지우기를 한것임
        }
    }
}

# 호출

if(BaseApplication.getInstance().getAppStatus() == BaseApplication.AppStatus.BACKGROUND) {
      // TODO
 }



'프로그래밍 > Android Tip' 카테고리의 다른 글

Android 개발 가이드  (0) 2019.12.30
[Android] Aquery Image  (0) 2017.08.07
[Android] Aquery Network  (0) 2017.08.07
[Android] ScrollView In ScrollView  (0) 2017.06.28
[Android] 내부 저장소 경로  (0) 2017.06.28

+ Recent posts