우찬쓰 개발블로그

안드로이드 App이 Background 상태인지 체크 본문

안드로이드/안드로이드 개발

안드로이드 App이 Background 상태인지 체크

이우찬 2019. 4. 2. 13:30
반응형

앱을 개발하다보면 현재 앱이 Foreground 상태인지 Background 상태인지 체크해야 하는 상황이 온다.

 

예전에는 이러한 상태를 각 엑티비티 마다 체크하는 로직을 넣어서 종합하여 현재 앱이 백그라운드인지 포어그라운드 인지 결정해야 했는데

 

구글이 AAC 라이브러리를 발표하면서 훨씬 간단한 방법이 생겼다.

 

먼저 app.gradle에 라이브러리를 추가한다.

 

implementation 'android.arch.lifecycle:extensions:1.1.1'

 

그다음 구현해놓은 Application에 다음과 같은 코드를 추가한다.

 

class TestApplication: Application(), LifecycleObserver {

    override fun onCreate() {
        super.onCreate()
        ProcessLifecycleOwner.get().lifecycle.addObserver(this)
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    fun onAppBackgrounded() {
        System.out.println("check app ON_STOP!!!!!!!!!!!!!!!!!")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun onAppForegrounded() {
        System.out.println("check app ON_START!!!!!!!!!!!!!!!!!")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    fun onAppCreated() {
        System.out.println("check app ON_CREATE!!!!!!!!!!!!!!!!!")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    fun onAppResumed() {
        System.out.println("check app ON_RESUME!!!!!!!!!!!!!!!!!")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    fun onAppDestroyed() {
        System.out.println("check app ON_DESTROY!!!!!!!!!!!!!!!!!")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    fun onAppPaused() {
        System.out.println("check app ON_PAUSE!!!!!!!!!!!!!!!!!")
    }
    
    @OnLifecycleEvent(Lifecycle.Event.ON_ANY)
    fun onAppAny() {
        System.out.println("check app ON_ANY!!!!!!!!!!!!!!!!!")
    }
}

 

LifesycleObserver를 상속받아 onCreate에서 ProcessLifecycleOwner에 추가해주면 아래처럼 각 이벤트 어노테이션이 달린 메소드가 실행된다.

 

메소드 이름은 전혀 상관 없으므로 원하는 이름을 지정해서 쓰면 된다.

 

ON_ANY는 어떤 이벤트인지 상관 없이 모두 온다.

반응형
Comments