티스토리 뷰
앱이 Background 상태인지 Foregrounded 쉽게 알 수는 없을까?
Android Architecure Componets에서는 lifecycle 을 지원하고 있습니다.
Lifecycle을 활용하기 위한 ProcessLifecycleOwner 선언 및 Observer 설정하는 방법에 대해 알아봅시다.
Android Architecure Componets Lifecycle 추가하기
Android Architecure Componets에서는 lifecycle을 사용 시 build.gradle에 라이브러리 추가합니다.
dependencies {
// Lifecycle components
implementation "android.arch.lifecycle:extensions:2.1.0-alpha04"
annotationProcessor "android.arch.lifecycle:compiler:2.1.0-alpha04"
}
Application에 선언하여 lifecycle을 확인 할 수 있는 환경을 구성해봅니다.
class App: Application(), LifecycleObserver {
ProcessLifecycleOwner.get().lifecycle.addObserver(this)
registerActivityLifecycleCallbacks(AppLifecycleTracker())
}
LifecycleObserver는 annotation을 통하여 사이클을 확인 시켜 줍니다.
Lifecycle Enum
Lifecycle Enum 은 ON_ANY
, ON_CREATE
, ON_DESTROY
, ON_PAUSE
, ON_RESUME
, ON_START
, ON_STOP
로 구성되어 있습니다.
ON_ANY
public static final Lifecycle.Event ON_ANY
An Event
constant that can be used to match all events.
ON_CREATE
public static final Lifecycle.Event ON_CREATE
Constant for onCreate event of the LifecycleOwner
.
ON_DESTROY
public static final Lifecycle.Event ON_DESTROY
Constant for onDestroy event of the LifecycleOwner
.
ON_PAUSE
public static final Lifecycle.Event ON_PAUSE
Constant for onPause event of the LifecycleOwner
.
ON_RESUME
public static final Lifecycle.Event ON_RESUME
Constant for onResume event of the LifecycleOwner
.
ON_START
public static final Lifecycle.Event ON_START
Constant for onStart event of the LifecycleOwner
.
ON_STOP
public static final Lifecycle.Event ON_STOP
Constant for onStop event of the LifecycleOwner
.
Lifecycle Observer
Lifecycle Observer 를 선언하여 앱을 실행 및 홈키로 백그라운드로 진입하도록 해봅시다.
class AppMain : Application(), LifecycleObserver {
/**************************************
* 앱 라이프 사이클 확인
**************************************/
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
private fun onAppBackgrounded() {
Log.d(TAG, "onAppBackgrounded()")
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
private fun onAppForegrounded() {
Log.d(TAG, "onAppForegrounded()")
}
inner class AppLifecycleTracker: ActivityLifecycleCallbacks {
override fun onActivityPaused(p0: Activity) {
Log.d(TAG, "onActivityPaused()")
}
override fun onActivityStarted(p0: Activity) {
Log.d(TAG, "onActivityStarted()")
}
override fun onActivityDestroyed(p0: Activity) {
Log.d(TAG, "onActivityDestroyed()")
}
override fun onActivitySaveInstanceState(p0: Activity, p1: Bundle) {
Log.d(TAG, "onActivitySaveInstanceState()")
}
override fun onActivityStopped(p0: Activity) {
Log.d(TAG, "onActivityStopped()")
}
override fun onActivityCreated(p0: Activity, p1: Bundle?) {
Log.d(TAG, "onActivityCreated()")
}
override fun onActivityResumed(p0: Activity) {
Log.d(TAG, "onActivityResumed()")
}
}
}
마무리
간략히 ProcessLifecycleOwner 사용 방법에 대해서 알아봤습니다.
좀 더 자유롭게 앱의 상태 변화에 따른 이벤트 처리하여 개발에 도움이 되면 좋겠습니다.
참고
https://developer.android.com/reference/androidx/lifecycle/ProcessLifecycleOwner
https://developer.android.com/reference/androidx/lifecycle/Lifecycle.Event#ON_CREATE
'프로그래밍 > Android' 카테고리의 다른 글
[Android] RecyclerView 깜박임 방지 방법 (0) | 2020.05.18 |
---|---|
[Android] STOMP Client 맛보기 (0) | 2020.04.14 |
크롬북(ChromeBook) 과 ADB IP 빌드 해보기 (0) | 2020.03.09 |
ViewTreeObserver 그게 뭔데? (0) | 2019.09.10 |
[Cordova] Android Studio 3.0 업데이트 후 에러 대응 방법 (2) | 2019.08.06 |
- MCC
- java
- 스코어헬퍼
- IT
- 안드로이드
- 패턴
- Android
- 선교
- RXjava
- 알고리즘
- DI
- 디자인패턴
- IOS
- 점수판
- 코틀린
- Kotlin
- 고시문헬퍼
- view
- 미션차이나센터
- swift
- Android Studio
- missioon
- 임용고시
- missionchina
- flutter
- push
- 탁구
- issue
- 고시문
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |