Platform/Android

[AAC] ViewModel | LiveData

개랭갱깽스타 2020. 3. 18. 11:21

ViewModel

왜 사용해 ?

Activity, Fragment 생명주기에 따른 데이터 손실? 관리가 어려워서, 개발자들이 힘들었었다.(= 액티비티에 종속된 UI데이터를 유지하는 것이 힘듦)
EX. 가로 ↔ 세로 화면 전환, 앱이 background에 있을 때,
메모리관리/부족 등으로 액티비티를 종료하고 다시 시작하는 경우가 있기 때문에 데이터 관리가 어려웠다.

Ex. 여러 Fragment에서 데이터를 공유하려면, 공유하는 하나의 Activity에 데이터를 종속시키고 관리해야 했다.
-> Activity의 생명주기에 데이터가 종속됨!

그 이전의 해결책

onSaveInstanceState()

-> 직렬화할 수 없는 객체는 저장 X (많은 데이터를 저장하기 위해 디자인 되지 X)

Retained Fragment

그래서 ViewModel은?

Activity와 Fragment에서 사용되는 UI관련 데이터 보관/관리하기 위해 디자인 됨!
데이터는 Activity와 Fragment로부터 분리시켜진다.
이전의 데이터 손실과정에서도, ViewModel 인스턴스는 유지되기 때문에, 데이터를 안전하게 다룰 수 있다!

관심사 분리 !! > 단일 책임 원칙

Activity & Fragmnet는 오직 UI업데이트 만 신경쓴다.

그림(LifeCycle of ViewModel)

어떻게 사용해?

주의!! ViewModel에 Activity, Fragment, View에 대한 Context를 저장하면 X
-> 메모리 릭을 발생시키는 직접적인 원인이 돋리 수 있다!
-> ApplicationContext를 저장하는 것은 OK (ApplicationContext = 전체 앱의 수명주기 라서!!)

데이터가 유지되는 경우

  • 기기의 구성이 변경(Configuration Changes) 됬을 때만!

유지되지 않을 경우

  • 사용자가 back버튼 눌렀을 때
  • 최근 앱 목록에서 앱을 종료했을 때
  • 안드로이드 프레임워크가 앱을 종료했을 때

좀 더 자세히!(아직....)

참고
https://medium.com/@jungil.han/%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8-viewmodel-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-2e4d136d28d2


LiveData

왜 사용해?

Android는 UI(Main) Thread와 WorkerThread로 구성!
Worker Thread에서 오래 걸리는 작업을 함.(여러 Thread 실행)

MediatorLiveData

https://hckim999.tistory.com/26](https://hckim999.tistory.com/26

반응형

'Platform > Android' 카테고리의 다른 글

[Jetpack] 0. 개요  (2) 2020.04.03
ViewModel / LiveData / RecyclerView  (0) 2020.03.27
[Class]  (0) 2020.03.17
[aab] Android App Bundle  (0) 2020.03.06
[adb] adb 명령어  (0) 2020.02.25