티스토리 뷰
개발을 진행하다 보면 가끔 앱의 실행상태를 체크해야 하는 경우가 있습니다.
안드로이드 앱의 경우에는 홈 키를 눌러 앱을 작업관리자에 그대로 실행해 두는 경우가 많죠.
이런 경우에 백그라운드 상태에 들어갔다고 보는데... 상태값을 어떻게 체크해야 할까요?
바로 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_RESUME과 ON_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 -> {}
}
}
}
'Android > Kotlin' 카테고리의 다른 글
[Android] StartActivity 애니메이션 없이 실행하기 (0) | 2023.05.30 |
---|---|
[Kotlin] AlertDialog 사용하기 (0) | 2023.04.22 |
[Kotlin] ViewPager2 사용법 (0) | 2020.08.18 |
[Kotlin] 코틀린 무작정 시작하기 - 기본문법 1 함수와 변수 (0) | 2020.07.10 |
[Kotlin] 코틀린 개발을 쉽게! Anko 라이브러리 사용하기 (0) | 2019.09.23 |
- Total
- Today
- Yesterday
- dart
- 코틀린
- NoAnimation
- 변수
- 격파르타 장점
- .toml
- gem update
- 버전카타로그
- rotation
- 함수
- 음성재생
- 격파르타 후기
- ~=
- Kotlin
- Xcode
- 격파르타 합격후기
- IOS
- 자바
- Java
- toml
- 스위프트
- Swift
- 아이폰
- FLUTTER
- 아이폰앱개발
- rotate
- 안드로이드
- Android
- 연산자
- sqld 자격증 합격
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |