본문 바로가기
안드로이드/코틀린

앱 백그라운드 상태 체크 : LifecycleEventObserver, DefaultLifecycleObserver

by 시작이반의반 2024. 5. 7.

안드로이드 백그라운 상태
LifecycleObserver 개발자 문서 일부

앱이 백그라운드인지 포그라운드인지 체크하려면 어떻게 해야 될까요?

생명주기를 관찰하는 LifecycleObserver를 활용할 수 있습니다.

위 그림은 LifecycleObserver 개발자 문서 일부인데요

LifecycleObser를 바로 사용하지 말고,

확장된 인터페이스로 LifecycleEventObserver 또는 DefaultLifecycleObserver를 사용하시면 됩니다.

 

 

 

 

 

Application 클래스 생성

 

앱에 전반적인 생명주기를 관찰하기 위해 Application 클래스가 필요합니다.

생성한 Application 클래스 이름을 아래와 같이 manifests에 등록해 주세요.

<application
    android:name=".MyApplication"
    
    ...

</application>

 

 

 

 

 

LifecycleEventObserver 사용

 

LifecycleEventObserver는 onStateChanged 메서드를 통해 생명주기 상태(Lifecycle.Event)가 변경될 때마다 호출되며, 해당 상태에 따라 백그라운드 및 포그라운드 상태를 체크할 수 있습니다.

class MyApplication: Application(), LifecycleEventObserver {

    companion object {
        private var TAG = "MyApplication"

        var isBackground = false
    }

    override fun onCreate() {
        super.onCreate()

        // 생명 주기 관찰 등록
        ProcessLifecycleOwner.get().lifecycle.addObserver(this)
    }

    override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
        when (event) {
            Lifecycle.Event.ON_CREATE -> {
                Log.d(TAG, "onStateChanged ON_CREATE")
            }

            Lifecycle.Event.ON_START -> {
                Log.d(TAG, "onStateChanged ON_START")
            }

            Lifecycle.Event.ON_RESUME -> {
                Log.d(TAG, "onStateChanged ON_RESUME")

                // 포그라운드
                isBackground = false
            }

            Lifecycle.Event.ON_PAUSE -> {
                Log.d(TAG, "onStateChanged ON_PAUSE")

                // 백그라운드
                isBackground = true
            }

            Lifecycle.Event.ON_STOP -> {
                Log.d(TAG, "onStateChanged ON_STOP")
            }

            Lifecycle.Event.ON_DESTROY -> {
                Log.d(TAG, "onStateChanged ON_DESTROY")

                // 생명 주기 관찰 해제
                ProcessLifecycleOwner.get().lifecycle.removeObserver(this)
            }

            Lifecycle.Event.ON_ANY -> {
                Log.d(TAG, "onStateChanged ON_ANY")
            }
        }
    }
}

 

 

 

 

 

DefaultLifecycleObserver 사용

 

DefaultLifecycleObserver는 생명주기 상태(Lifecycle.Event)에 따른 각각의 onCreate, onStart, onResume, onPause, onStop, onDestroy 메서드가 호출되기 때문에 백그라운드 및 포그라운드 상태를 체크할 수 있습니다.

class MyApplication: Application(), DefaultLifecycleObserver {

    companion object {
        private var TAG = "MyApplication"

        var isBackground = false
    }

    override fun onCreate() {
        super<Application>.onCreate()

        // 생명 주기 관찰 등록
        ProcessLifecycleOwner.get().lifecycle.addObserver(this)
    }
    
    override fun onResume(owner: LifecycleOwner) {
        Log.d(TAG, "onResume")

        // 포그라운드
        isBackground = false
    }

    override fun onPause(owner: LifecycleOwner) {
        Log.d(TAG, "onPause")

        // 백그라운드
        isBackground = true
    }

    override fun onDestroy(owner: LifecycleOwner) {
        Log.d(TAG, "onDestroy")

        // 생명 주기 관찰 해제
        ProcessLifecycleOwner.get().lifecycle.removeObserver(this)
    }
}

 

 

 

 

 

LifecycleEventObserver vs DefaultLifecycleObserver

 

  • LifecycleEventObserver : onStateChanged 메서드 하나로 모든 생명주기 상태에 대한 처리
  • DefaultLifecycleObserver : 필요한 생명주기 상태를 선택해서 처리

특별한 차이점은 없었고 제가 내린 결론은 둘 중에 아무거나 사용해도 무방합니다!

 

 

 

참고자료

Android Developers : LifecycleObserver

 

LifecycleObserver  |  Android Developers

androidx.appsearch.builtintypes.properties

developer.android.com

https://jason-api.tistory.com/85

 

안드로이드 앱 포그라운드, 백그라운드 체크 하는 방법 ! 포그라운드,백그라운드 일때 푸시 메시

안녕하세요! 오늘은 안드로이드 앱 포그라운드 와 백그라운드 상태 체크 하는 방법에 대해서 이야기 해보고자 합니다! 일단 포그라운드와 백그라운드 상태는 어떤 차이가 있을까요? 포그라운드

jason-api.tistory.com

댓글