안드로이드 뷰모델(ViewModel) 정리

·2022년 2월 17일
0
  • 화면 회전 등 화면 구성이 변할 때 생명주기를 고려해 UI 데이터를 저장하고 관리하는 곳이다.
  • 비트맵 등 대용량 데이터를 저장할 때 사용한다.
  • 자주 비동기 호출을 수행할 때 리소스를 관리하는 요소가 필요하다.
  • UI 단에 데이터 관리 등 많은 책임이 할당되면 테스트가 어려워지는데, 테스트를 수월하게 하기 위해 데이터를 관리하는 요소가 필요하다.

뷰모델 생명주기.

액티비티가 시작하고 종료될 때까지 여러 생명주기 메서드가 호출되는데 뷰모델은 계속해서 같은 상태인 걸 볼 수 있다.

결론

-> 액티비티가 재생성되면 액티비티가 갖고 있던 데이터는 사라진다.
-> 기존엔 onSaveInstanceState() 콜백을 쓰면 이런 예외적 상황에서 저장하고 싶은 데이터를 Bundle에 저장할 수 있었다.
-> 하지만 이 방법은 번들을 쓰기 때문에 저장하려는 데이터의 형태도 제한되고 대량의 데이터를 저장하기엔 제한이 있다. 번들 사용에 대해 가이드하고 있는 공식 문서에선 50KB 미만으로 유지하라고 말한다. 또한 이 방법에서 onSaveInstanceState()는 메인 쓰레드에서 동작해야 하기 때문에, 여기서 데이터를 저장하는 데 시간을 많이 쓰게 되면 그만큼 UI가 버벅거리게 된다.
-> 뷰모델은 액티비티가 재생성될 경우, onDestroy()가 호출되더라도 소멸되지 않는다. 뷰모델은 액티비티 안에서 finish()를 직접 호출하거나 사용자가 액티비티를 닫을 때 소멸된다.

-> 액티비티가 재생성됐을 때에도 유지하고 싶은 데이터는 뷰모델에 저장하면 된다.

참고 : https://onlyfor-me-blog.tistory.com/381,
https://jeongmin.github.io/2020/05/04/android/architecture-components/viewmodel/

profile
가보자고

0개의 댓글

관련 채용 정보