#요약
- ActivityLifecycleCallbacks : App의 관점에서 본 Activity
- LifecycleObserver : Lifecycle 대리 수행
- LifecycleOwner : Lifecycle 커스텀
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 |