티스토리 뷰

반응형

앱이 Background 상태인지 Foregrounded 쉽게 알 수는 없을까?

Android Architecure Componets에서는 lifecycle 을 지원하고 있습니다.

Lifecycle을 활용하기 위한 ProcessLifecycleOwner 선언 및 Observer 설정하는 방법에 대해 알아봅시다.

 

 

Android Architecure Componets Lifecycle 추가하기

 

Android Architecure Componets에서는 lifecycle을 사용 시 build.gradle에 라이브러리 추가합니다.

 

dependencies {
    // Lifecycle components
    implementation "android.arch.lifecycle:extensions:2.1.0-alpha04"
    annotationProcessor "android.arch.lifecycle:compiler:2.1.0-alpha04"
}

 

Application에 선언하여 lifecycle을 확인 할 수 있는 환경을 구성해봅니다.

 

class App: Application(), LifecycleObserver {
    ProcessLifecycleOwner.get().lifecycle.addObserver(this) 
    registerActivityLifecycleCallbacks(AppLifecycleTracker())
}

 

LifecycleObserver는 annotation을 통하여 사이클을 확인 시켜 줍니다.

 

 

Lifecycle Enum

 

Lifecycle Enum 은 ON_ANY, ON_CREATE, ON_DESTROY, ON_PAUSE, ON_RESUME , ON_START, ON_STOP 로 구성되어 있습니다.

 

ON_ANY

public static final Lifecycle.Event ON_ANY

An Event constant that can be used to match all events.

 

ON_CREATE

public static final Lifecycle.Event ON_CREATE

Constant for onCreate event of the LifecycleOwner.

 

ON_DESTROY

public static final Lifecycle.Event ON_DESTROY

Constant for onDestroy event of the LifecycleOwner.

 

ON_PAUSE

public static final Lifecycle.Event ON_PAUSE

Constant for onPause event of the LifecycleOwner.

 

ON_RESUME

public static final Lifecycle.Event ON_RESUME

Constant for onResume event of the LifecycleOwner.

 

ON_START

public static final Lifecycle.Event ON_START

Constant for onStart event of the LifecycleOwner.

 

ON_STOP

public static final Lifecycle.Event ON_STOP

Constant for onStop event of the LifecycleOwner.

 

 

Lifecycle Observer

Lifecycle Observer 를 선언하여 앱을 실행 및 홈키로 백그라운드로 진입하도록 해봅시다.

 

class AppMain : Application(), LifecycleObserver {

/**************************************
 * 앱 라이프 사이클 확인
 **************************************/
    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    private fun onAppBackgrounded() {
        Log.d(TAG, "onAppBackgrounded()")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    private fun onAppForegrounded() {
        Log.d(TAG, "onAppForegrounded()")
    }

    inner class AppLifecycleTracker: ActivityLifecycleCallbacks {
        override fun onActivityPaused(p0: Activity) {
            Log.d(TAG, "onActivityPaused()")
        }

        override fun onActivityStarted(p0: Activity) {
            Log.d(TAG, "onActivityStarted()")
        }

        override fun onActivityDestroyed(p0: Activity) {
            Log.d(TAG, "onActivityDestroyed()")
        }

        override fun onActivitySaveInstanceState(p0: Activity, p1: Bundle) {
            Log.d(TAG, "onActivitySaveInstanceState()")
        }

        override fun onActivityStopped(p0: Activity) {
            Log.d(TAG, "onActivityStopped()")
        }

        override fun onActivityCreated(p0: Activity, p1: Bundle?) {
            Log.d(TAG, "onActivityCreated()")
        }

        override fun onActivityResumed(p0: Activity) {
            Log.d(TAG, "onActivityResumed()")
        }
    }
}

 

 

마무리

간략히 ProcessLifecycleOwner 사용 방법에 대해서 알아봤습니다.

좀 더 자유롭게 앱의 상태 변화에 따른 이벤트 처리하여 개발에 도움이 되면 좋겠습니다.

 

 

참고

https://developer.android.com/reference/androidx/lifecycle/ProcessLifecycleOwner

https://developer.android.com/reference/androidx/lifecycle/Lifecycle.Event#ON_CREATE

https://blog.kmshack.kr/ProcessLifecycleOwner%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%95%B1-Background,-Foreground-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EC%B2%98%EB%A6%AC/

 

반응형
댓글