티스토리 뷰

반응형

개발을 진행하다 보면 가끔 앱의 실행상태를 체크해야 하는 경우가 있습니다.

안드로이드 앱의 경우에는 홈 키를 눌러 앱을 작업관리자에 그대로 실행해 두는 경우가 많죠.

이런 경우에 백그라운드 상태에 들어갔다고 보는데... 상태값을 어떻게 체크해야 할까요?

 

 


 

 

바로 Application 클래스에서 LifecycleObserver로 임의로 상태값을 저장하고 끌어다가 사용하는 방법이 있습니다.

생명주기를 체크함으로써 간단하게 상태값을 저장할 수 있습니다.

LifecycleObserver 에서는 아래와 같은 생명주기 체크가 가능하니 참고하시고, 필요에 따라 구현해서 쓰시면 되겠습니다.

 


자 그럼...시작해보겠습니다.

일단 아래처럼 Application 클래스를 만들고 LifecycleObserver 인터페이스를 불러옵니다.


class Application: android.app.Application(), LifecycleObserver {

    override fun onCreate() {
        super.onCreate()

    }

}

 

그리고 꼭 AndroidManifest.xml에 등록해 주세요.


<application
    android:name=".Application"

 

다음 LifecycleObserver 인터페이스를 불러옵니다.

Companion object로 상태값 체크 변수를 만들어 줍시다.


class Application: android.app.Application(), LifecycleObserver {

    companion object {
        var isBackground = true
    }

    override fun onCreate() {
        super.onCreate()

    }

}

 

오버라이드되는 함수가 아니기 때문에 변수명과 함수명은 꼭 따라 하지 않으셔도 됩니다.

이제 이 값을 변경해 가며 사용할 수 있도록 해보겠습니다.

저는 ON_RESUMEON_STOP을 활용해 기능을 구현하였습니다.


@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun onForeground() {
    Log.d(javaClass.name, "onForeground")
    isBackground = false
}

@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onBackground() {
    Log.d(javaClass.name, "onBackground")
    isBackground = true
}

 

자 이제 실행시켜 보겠습니다...!

앱이 실행되면서 onForeground을...? 앱이 백그라운드로 가면서 onBackground를...?

 

실행이 안 되는 이유는 LifecycleEvent가 옵저버로 해당 값을 받게 되는데 현재 옵저버가 설정되어 있지 않아서 그렇습니다.

옵저버를 설정하기 위해 gradle에 아래 dependency를 추가해줍니다.


implementation "androidx.lifecycle:lifecycle-process:2.6.1"

 

그리고 다시 Application으로 가서 아래 한줄을 추가합니다.


override fun onCreate() {
    super.onCreate()

    ProcessLifecycleOwner.get().lifecycle.addObserver(this)
}

 

이렇게 되면 이제 Lifecycle을 옵저빙할 수 있습니다.

다시 실행해보면 정상적으로 작동합니다.

이제 isBackground값으로 백그라운드인지 포그라운드 상태인지 확인하실때 사용하면 됩니다....!


전체 소스 (Application.kt)

class Application: android.app.Application(), LifecycleObserver {

    companion object {
        var isBackground = true
    }

    override fun onCreate() {
        super.onCreate()

        ProcessLifecycleOwner.get().lifecycle.addObserver(this)
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    fun onForeground() {
        Log.d(javaClass.name, "onForeground")
        isBackground = false
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    fun onBackground() {
        Log.d(javaClass.name, "onBackground")
        isBackground = true
    }
}

 

 

AndroidManifest.xml

<application
    android:name=".Application"

 

build.gradle (app)

dependencies {
    implementation "androidx.lifecycle:lifecycle-process:2.6.1"
}

현재는 LifecycleObserver가 Deprecate 되어서 확인해보니 LifecycleEventObserver라는게 생겼네요.

사용방법은 동일하며, 아래와 같이 사용하시면 됩니다.

 

전체 소스 (Application.kt)

class Application: android.app.Application(), LifecycleEventObserver {

    companion object {
        var isBackground = true
    }

    override fun onCreate() {
        super.onCreate()

        ProcessLifecycleOwner.get().lifecycle.addObserver(this)
    }

    override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
        when(event) {
            Lifecycle.Event.ON_RESUME -> {
                Log.d(javaClass.name, "onForeground")
                isBackground = false
            }
            Lifecycle.Event.ON_STOP -> {
                Log.d(javaClass.name, "onBackground")
                isBackground = true
            }
            else -> {}
        }
    }
}

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함