Lifecycle
Lifecycle
은 액티비티, 프래그먼트 같은 컴포넌트의 수명 주기 상태 정보를 포함한다.
이를 사용하면 컴포넌트의 수명 주기에 따르는 로직을 분리할 수 있으므로 컴포넌트의 코드가 간결해진다.
해당 상태 정보는 다른 객체에서 관찰할 수 있다.
Lifecycle
은 다음 두 enum
을 사용하여 자신과 관련된 컴포넌트의 수명 주기 상태를 추적한다.
State
Lifecycle
이 추적하는 수명 주기 상태. 이enum
은 다음 값을 포함한다.INITIALIZED
CREATED
STARTED
RESUMED
DESTROYED
Event
프레임워크 및Lifecycle
에서 제공하는 수명 주기 이벤트. 이는 액티비티나 프래그먼트의 콜백 이벤트에 맵핑된다.
이enum
은 다음 값을 포함한다.ON_ANY
ON_CREATE
ON_START
ON_RESUME
ON_PAUSE
ON_STOP
ON_DESTROY
현재 수명 주기 상태 확인하기
Lifecycle
객체의 getCurrentState()
를 호출하면 현재 수명 주기 상태에 해당하는 State
값이 반환된다.
로직을 특정 수명 주기 상태 이후에 실행하고자 한다면 조건문에 State.isAtLeast(State)
를 사용할 수 있다.
Lifecycle.State.isAtLeast(Lifecycle.State): Boolean
현재 수명 주기 상태가 파라미터로 전달된 상태보다 이후 상태인지 비교한다.
LifecycleObserver
Lifecycle
객체를 관찰하려면 DefaultLifecycleObserver
인터페이스를 구현하여 각 수명 주기에 대응하는 메서드를 재정의해야 한다. 그리고 나서 해당 관찰하고자 하는 Lifecycle
객체의 addObserver(LifecycleObserver)
에 관찰자 객체를 전달해야 한다. 반대로 관찰자를 등록 해제하려면 Lifecycle
의 removeObserver(LifecycleObserver)
에 관찰자 객체를 전달한다.
class MyObserver : DefaultLifecycleObserver {
override fun onResume(owner: LifecycleOwner) {
connect()
}
override fun onPause(owner: LifecycleOwner) {
disconnect()
}
}
myLifecycleOwner.getLifecycle().addObserver(MyObserver())
DefaultLifecycleObserver
인터페이스는 다음 6가지 메서드를 포함한다.
onCreate(LifecycleOwner)
ON_CREATE
이벤트가 발생함을 알린다.LifecycleOwner
의onCreate()
가 완료된 뒤 호출된다.onStart(LifecycleOwner)
ON_START
이벤트가 발생함을 알린다.LifecycleOwner
의onStart()
가 완료된 뒤 호출된다.onResume(LifecycleOwner)
ON_RESUME
이벤트가 발생함을 알린다.LifecycleOwner
의onResume()
가 완료된 뒤 호출된다.onPause(LifecycleOwner)
ON_PAUSE
이벤트가 발생함을 알린다.LifecycleOwner
의onPause()
가 호출되기 전 호출된다.onStop(LifecycleOwner)
ON_STOP
이벤트가 발생함을 알린다.LifecycleOwner
의onStop()
가 호출되기 전 호출된다.onDestroy(LifecycleOwner)
ON_DESTROY
이벤트가 발생함을 알린다.LifecycleOwner
의onDestroy()
가 호출되기 전 호출된다.
LifecycleOwner
Lifecycle
을 포함하는 인터페이스다. 단일 메서드인 getLifecycle()
을 통해 포함하고 있는 Lifecycle
에 액세스할 수 있다. Fragment
및 FragmentActivity
는 LifecycleOwner
를 구현하는 클래스이므로 바로 Lifecycle
을 참조할 수 있다.
'Android' 카테고리의 다른 글
WorkManager (1) : 작업 설정/예약하기 (0) | 2022.12.02 |
---|---|
DataStore (0) | 2022.11.30 |
데이터 바인딩 (4) : 양방향 바인딩 (0) | 2022.11.05 |
데이터 바인딩 (3) : 바인딩 어댑터 (0) | 2022.11.03 |
데이터 바인딩 (2) : 이벤트 처리 / Observable (0) | 2022.11.01 |