제이슨의 개발이야기

안드로이드 앱 포그라운드, 백그라운드 체크 하는 방법 ! 포그라운드,백그라운드 일때 푸시 메시지 다르게 구현 본문

안드로이드

안드로이드 앱 포그라운드, 백그라운드 체크 하는 방법 ! 포그라운드,백그라운드 일때 푸시 메시지 다르게 구현

제이쓰은 2021. 8. 13. 12:47
728x90
반응형

안녕하세요! 오늘은 안드로이드 앱 포그라운드 와 백그라운드 상태 체크 하는 방법에 대해서 이야기 해보고자 합니다! 

 

일단 포그라운드와 백그라운드 상태는 어떤 차이가 있을까요?

 

포그라운드 상태는 앱이 켜저 있는 상태 즉 유저가 앱을 사용하고 있는 상태를 의미합니다!

 

백그라운드 상태는 포그라운드 와 반대로 앱이 꺼저있거나 앱을 사용하다가 홈 버튼을 눌러서 빠저나온 경우를 의미합니다 

 

자 그러면 현재 앱이 포그라운드 상태인지 백그라운드 상태 인지 구별이 필요 한 경우는 어떤  경우 일까요?

 

가장 보통의 경우는 

푸시메시지 라고 생각합니다 

 

백그라운드 ,  포그라운드 일 때 푸시메시지 를 눌렀을 때 처리 방식을 다르게 하는 경우가 있습니다 ! 

예를 들면 백그라운드 상태에서 푸시 메시지를 누르면 로딩화면을 보여주고 나서 그 다음 화면을 보여주고

포그라운드 상태에서는 푸시 메시지를 누르면 로딩화면은 생략하고 그 다음 화면을 보여 줄 경우 상태에 따라 처리 방식이 달라집니다 

 

그렇다면 어떻게 백그라운드, 포그라운드 를 어떻게 체크할까요??

 

앱이 처음 실행할때 실행되는 클래스 를 만들어 주는 방법 입니다! 

 

저는 처음에 MyApp 이란 클래스를 만들고 

 

Application을 상속받고

LifecycleObserver 인터페이스를 구현합니다! 

그리고 onCreate 메소드를 오버라이딩 합니다 

그리고 밑에 코드에서 보이는 것 처럼 메소드를 구현 하는대 

 

onAppBackGrounded() 메소드와 onAppForegrounded() 메소드를 구현합니다 

이 두개의 메소드는 오버라이딩 하는 메소드가 아니므로 직접 작성해야 하고 메소드 명은 자신이 원하는 이름으로 작성하셔도 됩니다! 

단 위에 어노테이션은 아래 코드 어노테이션 처럼 동일하게 작성하셔야합니다! 

 

onAppBackGrounded() 메소드 안에는 isForeground  =false

 

onAppForeGrounded() 메소드 안에는 isForeground= true 

합니다

 

그리고 나서 menifest에서 

 

 

 

<application 태그 안에

android:name="<패키지이름>.MyApp"

 

을 추가하면

앱이 실행하면 MyApp 클래스 파일이 실행되고

 

포그라운드 , 백그라운드 상태를 체크 할 수 있습니다! 

 

 

이렇게 하고  푸시메시지 에서 의 상태 체크를 하는 경우 

 

if(MyApp.isForeground){

...

}

이렇게 if문을 통해서 원하는 처리 로직을 작성하시면 됩니다!  

 

 

menifest 안 application 태그 부분

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:name=".MyApp"
        android:requestLegacyExternalStorage="true"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.MoaKotlin"
        android:usesCleartextTraffic="true">

 

MyApp.class

class MyApp : Application(), LifecycleObserver {

    companion object{
    var isForeground =false
    }
    
    override fun onCreate() {
        super.onCreate()
        ProcessLifecycleOwner.get().lifecycle.addObserver(this)
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    fun onAppBackgrounded() { isForeground = false }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun onAppForegrounded() { isForeground = true}

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    fun onAppCreated() {  }

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    fun onAppResumed() {}

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    fun onAppDestroyed() { }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    fun onAppPaused() {  }

    @OnLifecycleEvent(Lifecycle.Event.ON_ANY)
    fun onAppAny() {  } }

onAppBackGrounded() 메소드와 onAppForegrounded() 메소드 

 

이 외 메소드는 구현 하지 않아도 전혀 문제 없지만 혹시 다른 필요한 경우가 있을 수 있어서 남겨 놓습니다! 

 

위 코드는 아래의 블로그에서 참고하고 공부했습니다!

 

https://woochan-dev.tistory.com/30

 

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

앱을 개발하다보면 현재 앱이 Foreground 상태인지 Background 상태인지 체크해야 하는 상황이 온다. 예전에는 이러한 상태를 각 엑티비티 마다 체크하는 로직을 넣어서 종합하여 현재 앱이 백그라운

woochan-dev.tistory.com

 

728x90
반응형