Как LifecycleOwner определяет что меняется состояние

«Как LifecycleOwner определяет что меняется состояние» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

LifecycleOwner определяет изменение состояния через LifecycleRegistry, который хранит текущее состояние и уведомляет наблюдателей (LifecycleObservers). Состояние меняется при вызове handleLifecycleEvent() с соответствующим событием (ON_CREATE, ON_START и т.д.). Например, в Activity события автоматически вызываются системой:

class MyActivity : AppCompatActivity() {
    override fun onCreate() {
        lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_CREATE)
    }
}

Для кастомных LifecycleOwner нужно вручную вызывать handleLifecycleEvent() при изменении состояния. LifecycleRegistry сравнивает новое состояние с текущим и уведомляет наблюдателей только если состояние действительно изменилось.