activity_main.xml

<layout xmlns:android="<http://schemas.android.com/apk/res/android>"
    xmlns:app="<http://schemas.android.com/apk/res-auto>"
   
    
    <data>
        ....
    </data>
		<androidx.constraintlayout.widget.ConstraintLayout
			....

		<TextView
			...
			android:onClick'@{() -> vm.moveNext()}'
			... />

</layout>

MainViewModel

private val _openEvent = MutableLiveData<Unit>()
val openEvent: LiveData<Unit>
	get() = _openEvent

fun moveNext() {
	_openEvent.value = Unit
}

MainActivity

viewModel.openEvent.observe(this , {
	startActivity(Intent(this@MainActivity, NextActivity::class.java))
})

해당 TextView onClick을 viewModel에 있는 moveNext에서 클릭이벤트 관한 메소드를 정의 하고

MainActivity에서 observe하여 이에 관한 이벤트에 대한 구독 처리를 하였다

해당 코드를 만들어서 앱을 실행 시켰을때 버튼을 처리하고(NextActivity 이동)난후 다시 MainActivity 돌아와서 화면을 회전 하였을때 다시 이벤트가 발생하는 현상이 생겼다

이러한 문제를 곰곰히 생각해보니

위 그림처럼 화면을 회전했을때 Activity는 재생성 되고 viewModel은 그대로인 상태에서 LiveData는 데이터를 가지고 있고, 구독만 새로 하기 때문에 다시 이벤트가 발생하는 것이였다

그래서 이러한 문제를 해결 하기 위해 크게 대표적인 2가지가 있다

바로 SingleLiveData 와 Event Wrapper 방식이다.