6월 3일의 ⁠#Android11: 베타 버전 출시 행사에 참여하세요.

ViewModel의 저장된 상태 모듈   Android Jetpack의 구성요소

UI 상태 저장 자료에서 언급했듯이 ViewModel 개체가 구성 변경사항을 처리할 수 있으므로 개발자는 회전이나 다른 상황에서 상태에 신경 쓸 필요가 없습니다. 그러나 시스템에서 시작된 프로세스 중단을 처리해야 할 때에는 onSaveInstanceState()를 백업으로 사용해야 할 수 있습니다.

일반적으로 UI 상태는 활동이 아닌 ViewModel 개체에 저장되거나 참조됩니다. 따라서 onSaveInstanceState()를 사용하기 위해서는 이 모듈이 개발자를 대신해 처리할 수 있는 상용구가 필요합니다.

모듈이 설정되면 ViewModel 개체는 생성자를 통해 SavedStateHandle 개체를 받습니다. 이는 저장된 상태에 개체를 작성하고 저장된 상태에서 개체를 검색할 수 있게 하는 키-값 맵입니다. 이러한 값은 프로세스가 시스템에 의해 종료된 후에도 유지되며 동일한 개체를 통해 계속 사용할 수 있습니다.

설정 및 사용

저장된 상태 모듈을 Android 프로젝트로 가져오려면 수명 주기 출시 노트에서 종속성 선언 안내를 참조하세요.

SavedStateHandle을 받도록 ViewModel을 설정하려면 AbstractSavedStateVMFactory를 확장하는 Factory를 사용하여 코드를 생성해야 합니다.

Kotlin

    val vm = ViewModelProvider(this, SavedStateVMFactory(this))
            .get(SavedStateViewModel::class.java)

    

자바

    SavedStateViewModel vm = new ViewModelProvider(this, new SavedStateVMFactory(this))
            .get(SavedStateViewModel.class);
    

그 후에 다음과 같이 SavedStateHandle을 받는 생성자를 ViewModel에 포함할 수 있습니다.

Kotlin

    class SavedStateViewModel(private val state: SavedStateHandle) : ViewModel() { ... }
    

자바


    public class SavedStateViewModel extends ViewModel {
        private SavedStateHandle mState;

        public SavedStateViewModel(SavedStateHandle savedStateHandle) {
            mState = savedStateHandle;
        }
        ...
    }
    

값 저장 및 검색

SavedStateHandle 클래스에는 다음과 같이 키-값 맵에 필요한 메서드가 있습니다.

  • get(String key)
  • contains(String key)
  • remove(String key)
  • set(String key, T value)
  • keys()

또한 식별 가능한 LiveData 항목으로 래핑된 값을 반환하는 특별한 메서드인 getLiveData(String key)도 있습니다.

허용되는 클래스

유형/클래스 배열 지원
double double[]
int int[]
long long[]
String String[]
byte byte[]
char char[]
CharSequence CharSequence[]
float float[]
Parcelable Parcelable[]
Serializable Serializable[]
short short[]
SparseArray
Binder
Bundle
ArrayList
Size (only in API 21+)
SizeF (only in API 21+)

추가 리소스

ViewModel의 저장된 상태 모듈에 관한 자세한 내용은 다음 리소스를 참조하세요.

Codelab