1. LifeCycles란?
생명주기 인식 컴포넌트(Lifecycle-aware-Component)로 이는 Activity 또는 Fragment 같은 UI의 상태가 변경될 때 이에 대응하는 라이브러리이다. 이를 사용하면 더욱 체계적으로 구성하고 가벼운 코드를 유지보수할 수있다. 결론적으로 생명주기 모니터링을 돕는 라이브러리라고 할 수 있다.
- Lifecycle : Lifecycle을 나타내는 객체
- Lifecycle Owner : Life 객체에 activity, fragment의 상태를 제공한다.
- Lifecycle Observer : 상태변화에 대한 이벤트를 받는다.
2. LifecycleRegistry
Lifecycle의 구현체가 바로 LifecycleRegistry인데 등록된 여러 Observer를 handle할 수 있다. override한 주요 메소드는 addObserver, removeObserver 등 Observer 객체를 관리하기 위한 것과 Lifecycle의 State를 지정하거나 변경할 수 있는 메소드들이다.
class MainActivity : AppCompatActivity(), LifecycleOwner {
private lateinit var lifecycleRegistry: LifecycleRegistry
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
lifecycleRegistry = LifecycleRegistry(this)
lifecycleRegistry.currentState = Lifecycle.State.CREATED
}
override fun onStart() {
super.onStart()
lifecycleRegistry.currentState = Lifecycle.State.STARTED
}
override fun getLifecycle(): Lifecycle {
return lifecycleRegistry
}
}
3. Observer
LifecycleObserver 인터페이스를 사용하면 되지만 해당 인터페이스를 직접 사용하지 않고 이를 구현하여 작성된 인터페이스인 DefaultLifecycleObserver나 LifecycleEventObserver를 사용한다.
- DefaultLifecycleObserver : LifecycleOwner의 상태 변경을 관찰하는 콜백 인터페이스이다. 만약 DefaultLifecycleObserver와 LifecycleEventObserver를 모두 구현했다면 DefaultLifecycleObserver의 메소드
들이 먼저 호출되고 나서 LifecycleEventObserver.onStateChanged()가 호출된다.
- LifecycleEventObserver : 생명주기 변화를 수신하여 receiver에게 보낼 수 있는 클래스이다. LifecycleEventObserver의 메소드는 1개 존재하고 생명주기가 변할 때 Event가 넘어오게 되고 해당 Event를
분기해서 필요한 코드를 호출한다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
lifecycle.addObserver(MyLifeCycleObserver())
}
}
class MyLifeCycleObserver: DefaultLifecycleObserver, LifecycleEventObserver {
override fun onCreate(owner: LifecycleOwner) {
super.onCreate(owner)
Log.d(owner.toString(), "onCreate")
}
override fun onResume(owner: LifecycleOwner) {
super.onResume(owner)
Log.d(owner.toString(), "onResume")
}
override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
when(event) {
Lifecycle.Event.ON_CREATE -> {
Log.d(source.toString(), "onCreateEvent")
}
Lifecycle.Event.ON_START -> {
Log.d(source.toString(), "onStartEvent")
}
else -> {}
}
}
}
'Kotlin' 카테고리의 다른 글
[Paging] Paging이란? (0) | 2023.02.03 |
---|---|
[ViewModel] ViewModel이란? (0) | 2023.02.03 |
[Coroutine] Coroutine이란? (0) | 2023.02.02 |
[TIL] Room DB 사용법 (0) | 2023.02.02 |
[TIL] Room DB와 Realm DB의 차이 (0) | 2023.01.31 |
댓글