본문 바로가기
Kotlin

[LifeCycles] LifeCycles란?

by 명훈스토리 2023. 2. 3.
SMALL

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 -> {}
        }
    }

}
LIST

'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

댓글