https://developer.android.com/topic/libraries/architecture/viewmodel
안드로이드 공식문서 ViewModel을 참고하여 정리한 글입니다.
아키텍처 구성요소의 UI 데이터 준비를 담당하는 UI 컨트롤러에 ViewModel Helper Class를 제공한다.
ViewModel 객체는 구성이 변경되는 동안 자동으로 저장되므로, 이 객체가 보유한 데이터는 Activity, Fragment에서 즉시 사용할 수 있다. 앱에서 사용자의 목록을 표시해야 한다면 사용자의 목록을 얻어서 Activity나 Fragment대신 ViewModel에 저장하도록 할당해야한다.
class MyViewModel: ViewModel() {
private val users: MutableLiveData<List<User>> by lazy {
MutableLiveData<List<User>>().also {
loadUsers()
}
}
fun getUsers(): LiveData<List<User>> {
return users
}
private fun loadUsers() {
}
}
그 이후에 Activity나 Fragment에서 사용할 수 있다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savadInstanceState: Bundle?){
super.onCreate(savadInstanceState)
setContentView(R.layout.activity_main)
val viewModel: MyViewModel by viewModels()
// val viewModel = ViewModelProvider(this, )
viewModel.getUsers().observe(this, Observer<List<User>>){ users ->
// update UI
}
}
}
ViewModel은 View, Lifecycle 그리고 Activity Context를 참조해서는 안된다.
ViewModel의 객체의 범위는 ViewModel을 초기화 할 때 ViewModelProvider에 전달되는 Lifecycle(Activity, Fragment)로 지정된다. 범위가 지정된 ViewModel은 Activity나 Fragment가 끝날 때
까지 메모리에 남아있는다.