ViewModel
- 상태를 캐시하여 구성 변경이 되어도 UI가 데이터를 다시 가져올 필요가 없음
- UI 컨트롤러의 데이터를 캡슐화 하여 구성이 변경되어도 데이터를 유지하는 것이 목적
- SaveStateHandle을 사용하면 구성 변경뿐 아니라 프로세스 재생성 전반에 걸쳐서도 데이터를 유지할 수 있습니다. 즉, 사용자가 앱을 닫았다가 나중에 열더라도 UI 상태를 그대로 유지할 수 있습니다.
지속성
- 구성 변경에도 데이터를 다시 가져올 필요가 없음
범위
- viewmodel을 인스턴스화 할때는 VewModelStoreOwner 인터페이스를 구현하는 개체를 전달
- ComponentActvity, Fragment, NavBackStackEntry
수명주기
- 활동이 완료 될때
- 프래그먼트가 분리 될 때
- 탐색 항목의 경우 백 스택에서 삭제될 때
권장 사항
- 그룹이나 양식과 같은 재 사용 가능한 UI 구성요소의 상태 를 담지 않을것
- 메서드의 이름과 UI 상태 필드의 이름을 일반적으로 유지하여 모든 UI를 수용가능 하게 해야할것
- 메모리 누수 방지를 위해 context 및 resources 같은 수명 주기 관련 API의 참조는 불가
- fragment 나 화면 수준의 구성 가까이에 위치해야 한다
Reference