https://developer.android.com/reference/android/arch/lifecycle/Lifecycle
-
build.gradle 에 아래것을 추가한다.
kapt "android.arch.lifecycle:compiler:1.1.1"
implementation "android.arch.lifecycle:extensions:1.1.1”
-
background, foreground state detection 을 위해 아래 클래스를 생성한다.
class ApplicationObserver : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onForeground() {
// App goes to foreground
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onBackground() {
// App goes to background
}
}
-
등록은 아래와 같이 한다.
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
ProcessLifecycleOwner.get()
.lifecycle
.addObserver(ApplicationObserver())
}
}
-
ProcessLifecycleOwner 를 잘 활용하면, activity 의 onCreate, onDestroy, onStart, onResume, onPause, onStop 등의 상태도 알 수 있다.
단, 주의사항이 있는데..
ProcessLifecycleOwner 는 ON_CREATE 는 1회만 호출되고, ON_DESTROY 는 절대 호출되지 않는다.
ON_START, ON_RESUME 은 첫번째 activity 가 이 상태에 있을 때만 불리고, ON_PAUSE, ON_STOP 은 마지막 activity 가 이 상태에 있을때 delay 와 함께 전달된다.
(돼왕 : 이렇게 작동한다면 어떤 케이스에 이 녀석을 활용할지 검토가 필요해보임.. ON_PAUSE, ON_STOP 이후 다시 Activity 가 올라오면 ON_START, ON_RESUME 이 불릴지 테스트 필요)
https://developer.android.com/reference/android/arch/lifecycle/ProcessLifecycleOwner
-
ON_CREATE, ON_START, ON_RESUME 은 LifecycleOwner 의 관련 method 들이 불린 후에 불린다.
ON_PAUSE, ON_STOP, ON_DESTORY 는 LifecycleOwner 의 관련 method 들이 불리기 전에 불린다.
(예를 들어 ON_START 는 onStart 가 return 된 다음에 불리고, ON_STOP 은 onStop 이 불리기 전에 불린다.)
-
Java 8 을 사용한다면 DefaultLifecycleObserver 를 사용하면 되며 build.gradle 에 다음을 dependency 로 추가해야 한다.
android.arch.lifecycle:common-java8:<version>
사용 코드 패턴은 아래와 같다.
class TestObserver implements DefaultLifecycleObserver { // default method 들을 가지고 있다.
@Override
public void onCreate(LifecycleOwner owner) {
// your code
}
}
-
Java 7 을 사용한다면 annotation 방식을 사용한다. Java 8 이 android 의 main stream 이 된 후에는 이 방식은 deprecate 될 것이기 떄문에 DefaultLifecycleObserver 를 사용하는 것이 추천된다.
class TestObserver implements LifecycleObserver {
@OnLifecycleEvent(ON_STOP)
void onStopped() {}
}
-
Observer method 들은 0개 혹은 1개의 argument 를 받는다.
argument 를 명시한다면 이는 LifecycleOwner 가 되야 한다.
ON_ANY 르 마킹된 녀석은 두번째 argument 를 받을 수 있는데, 이는 Lifecycle.Event 가 된다.
class TestObserver implements LifecycleObserver {
@OnLifecycleEvent(ON_CREATE)
void onCreated(LifecycleOwner source) {}
@OnLifecycleEvent(ON_ANY)
void onAny(LifecycleOwner source, Event event) {}
}
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] Cookie 는 android 단말에서 world wide 한가? (0) | 2018.11.29 |
---|---|
[android] JobIntentService 소개 (tutorial) (0) | 2018.11.28 |
[android] code 와 resource shrink 하자! (0) | 2018.11.23 |
[android] D8 이 뭐야? (0) | 2018.11.22 |
[android] APK Signature Scheme v2 (0) | 2018.11.21 |
댓글