공식 학습 문서
ViewModel은 페이지 관련 데이터를 저장하고 이러한 데이터를 Activity 및 Fragment와 같은 수명 주기 관련 구성 요소와 연결하여 데이터에 수명 주기를 제공합니다.
기능:
ViewModel의 수명 주기
는 viewModel 개체가 생성될 때 시작되며 연결된 인터페이스 컨트롤러가 삭제될 때까지 삭제되지 않습니다. 즉, 가로-세로 화면 전환이 발생하더라도 인터페이스 관련 데이터는 항상 존재하며, 가로-세로 화면 전환에 영향을 받지 않습니다.
일반적으로 Activity의 onCreate() 메소드에서 ViewModel 객체를 생성합니다. ViewModel 객체는 Activity가 삭제되고 리소스가 해제될 때까지 메모리에 남아 있습니다.
위의 ViewModel의 작동 원리를 통해 다음을 알 수 있습니다.
1. ViewModel이 생성되면 현재 인터페이스 컨트롤러(Activity, Fragment 등)가 나타날 때까지 저장됩니다. )이 삭제됩니다.
2. 서로 다른 인터페이스 컨트롤러와 ViewModel 객체가 서로 다른 로컬 싱글톤입니다. 전역 싱글톤 ViewModel 객체를 얻으려면 애플리케이션에 ViewModel을 넣을 수 있습니다.
다음으로 소스 코드 관점에서 원리를 분석해 보겠습니다.
Activity 객체를 빌드할 때 상위 클래스 ComponentActivity.java는 ViewModelStoreOwner 인터페이스를 구현하고 해당 구현 메소드에서 ViewModelStore 객체를 생성합니다.
인터페이스 컨트롤러의 생성자에는 라이프 사이클에 대한 관찰자가 추가되고, 관찰자가 수명을 수신할 때 현재 인터페이스 컨트롤러의 주기가 Lifecycle.Event.ON_DESTROY이면 mViewModelStore 객체 맵에 저장된 모든 viewModel이 지워져 리소스를 해제합니다.
여기서는 ON_DESTROY의 수명 주기 상태만 처리됩니다. 즉, ViewModel 객체 인스턴스가 성공적으로 생성된 후에는 인터페이스 컨트롤러(예: Activity)의 수명 주기가 어떻게 변경되는지에 관계없이(ON_DESTROY 제외) , ViewModel은 정리되지 않습니다.
여기에서 ViewModel에 해당하는 키의 고유성을 볼 수 있습니다.
ViewModel 작동 원리의 핵심 기술 포인트:
관찰자 모드, 엔지니어링 모드 , 리플렉션, 해시맵 데이터 구조
ViewModel은 MVVM 아키텍처 모델에서 DataBinding과 결합하여 사용되는데, 이는 도약하는 느낌을 줄 것입니다. 앞으로는 더 많이 사용될 예정입니다. 이 기사에서는 원리를 사용하고 이해하는 방법을 배우는 데만 중점을 둡니다.