제이슨의 개발이야기
안드로이드 앱 포그라운드, 백그라운드 체크 하는 방법 ! 포그라운드,백그라운드 일때 푸시 메시지 다르게 구현 본문
안녕하세요! 오늘은 안드로이드 앱 포그라운드 와 백그라운드 상태 체크 하는 방법에 대해서 이야기 해보고자 합니다!
일단 포그라운드와 백그라운드 상태는 어떤 차이가 있을까요?
포그라운드 상태는 앱이 켜저 있는 상태 즉 유저가 앱을 사용하고 있는 상태를 의미합니다!
백그라운드 상태는 포그라운드 와 반대로 앱이 꺼저있거나 앱을 사용하다가 홈 버튼을 눌러서 빠저나온 경우를 의미합니다
자 그러면 현재 앱이 포그라운드 상태인지 백그라운드 상태 인지 구별이 필요 한 경우는 어떤 경우 일까요?
가장 보통의 경우는
푸시메시지 라고 생각합니다
백그라운드 , 포그라운드 일 때 푸시메시지 를 눌렀을 때 처리 방식을 다르게 하는 경우가 있습니다 !
예를 들면 백그라운드 상태에서 푸시 메시지를 누르면 로딩화면을 보여주고 나서 그 다음 화면을 보여주고
포그라운드 상태에서는 푸시 메시지를 누르면 로딩화면은 생략하고 그 다음 화면을 보여 줄 경우 상태에 따라 처리 방식이 달라집니다
그렇다면 어떻게 백그라운드, 포그라운드 를 어떻게 체크할까요??
앱이 처음 실행할때 실행되는 클래스 를 만들어 주는 방법 입니다!
저는 처음에 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
'안드로이드' 카테고리의 다른 글
build.Gradle 파일? build.Gradle(project) 와 build.Gradle(app) 차이 (0) | 2021.09.06 |
---|---|
안드로이드 현재 배터리 잔량 체크 하는 메소드 (0) | 2021.08.18 |
JSON To Kotlin 플러그인 자동으로 Data Model을 만들자 ! 개발 소요 시간 단축 (0) | 2021.08.10 |
Service 컴포넌트 onTaskRemoved(rootIntent: Intent?) 앱을 강제종료 시켰을 때 (0) | 2021.07.20 |
안드로이드 서버 응답을 기다리는 중 화면터치 막는 방법 ! (0) | 2021.07.14 |