Savedstate

프로세스가 종료되면 UI 상태를 저장하고 프로세스가 다시 시작되면 복원하는 플러그형 구성요소를 작성합니다.
최근 업데이트 안정화 버전 출시 후보 버전 베타 버전 알파 버전
2024년 12월 11일 1.2.1 - - 1.3.0-alpha06

종속 항목 선언

SavedState에 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용은 Google Maven 저장소를 읽어보세요.

다음과 같이 앱 또는 모듈의 build.gradle 파일에 필요한 아티팩트의 종속 항목을 추가합니다.

Groovy

dependencies {
    // Java language implementation
    implementation "androidx.savedstate:savedstate:1.2.1"

    // Kotlin
    implementation "androidx.savedstate:savedstate-ktx:1.2.1"
}

Kotlin

dependencies {
    // Java language implementation
    implementation("androidx.savedstate:savedstate:1.2.1")

    // Kotlin
    implementation("androidx.savedstate:savedstate-ktx:1.2.1")
}

종속 항목에 관한 자세한 내용은 빌드 종속 항목 추가를 참고하세요.

의견

제출하신 의견은 Jetpack을 개선하는 데 도움이 됩니다. 새로운 문제를 발견하거나 라이브러리 개선을 위한 아이디어가 있다면 Google에 알려 주세요. 새 문제를 제출하기 전에 이 라이브러리의 기존 문제를 살펴보시기 바랍니다. 별표 버튼을 클릭하여 기존 문제에 투표할 수 있습니다.

새로운 문제 제출하기

자세한 내용은 Issue Tracker 문서를 참고하세요.

버전 1.3

버전 1.3.0-alpha06

2024년 12월 11일

androidx.savedstate:savedstate-*:1.3.0-alpha06이 출시되었습니다. 버전 1.3.0-alpha06에는 이 커밋이 포함되어 있습니다.

새로운 기능

  • 이제 SavedState KMP에서 IBinder, Size, SizeF, Array<Parcelable>, SparseArray<Parcelable>, Serializable (Android)를 지원합니다. (I1ba94, b/334076622)
  • Bundle에서 지원하는 Java 및 Android 유형을 인코딩/디코딩하는 데 사용할 수 있는 KSerializer 인스턴스를 추가합니다. 클래스의 관련 필드를 @Serializable(with = ParcelableSerializer::class)로 표시합니다. (I8c10f, I28caf, b/376026712)
  • 이제 findViewTreeSavedStateRegistryOwner를 통해 검색된 SavedStateRegistryOwner 인스턴스를 ViewOverlay와 같은 뷰의 불연속 상위를 통해 확인할 수 있습니다. 불일치하는 뷰 상위에 관한 자세한 내용은 핵심의 출시 노트 또는 ViewTree.setViewTreeDisjointParent의 문서를 참고하세요. (Iccb33)

API 변경사항

  • 이름 지정 및 패키지 구성을 SavedStateRegistryOwnerDelegate와 더 일관되게 만들었습니다. (I8c135, b/376026744)

버전 1.3.0-alpha05

2024년 11월 13일

androidx.savedstate:savedstate-*:1.3.0-alpha05이 출시되었습니다. 버전 1.3.0-alpha05에는 이 커밋이 포함되어 있습니다.

KotlinX 직렬화 지원

  • 이제 SavedState에 KotlinX 직렬화 지원이 포함됩니다. encodeToSavedStatedecodeFromSavedState 메서드를 사용하여 @Serializable로 주석 처리된 클래스를 SavedState로 변환할 수 있습니다. 반환된 SavedState는 Android의 일반 Bundle이며 Bundle를 허용하는 모든 API에서 사용할 수 있습니다. (I6f59f, b/374102924)

    @Serializable
    data class Person(val firstName: String, val lastName: String)
    
    fun main() {
        val person = Person("John", "Doe")
        val encoded: SavedState = encodeToSavedState(person)
        val decoded: Person = decodeFromSavedState(encoded)
    }
    
  • 또한 SavedStateRegistryOwner@Serializable 클래스를 쉽게 저장할 수 있도록 지연 속성 대리자인 saved도 포함되어 있습니다 (예: ComponentActivity, Fragment 등)를 정의하고 프로세스 종료와 재생성 간에 이러한 클래스가 자동으로 복원되도록 합니다. saved 대리자는 지연 실행되며 액세스될 때까지 init 람다를 호출하거나 SavedStateRegistry에 아무것도 저장하지 않습니다. (I66739, b/376027806)

    @Serializable
    data class Person(val firstName: String, val lastName: String)
    
    class MyActivity : ComponentActivity() {
        var person by saved { Person("John", "Doe") }
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            this.person = Person("Jane", "Doe")
        }
    }
    
  • 수명 주기 2.9.0-alpha07에 추가된 SavedStateHandle의 유사한 saved 속성 대리인이 있습니다.

API 변경사항

  • SavedStatetoMap를 추가하여 모든 SavedState를 일반 Map (얕은 사본)로 변환할 수 있습니다. (I487b9, b/334076622)
  • 이제 SavedState KMP에서 배열을 지원합니다. (Ic0552, b/334076622)

버전 1.3.0-alpha04

2024년 10월 30일

androidx.savedstate:savedstate-*:1.3.0-alpha04이 출시되었습니다. 버전 1.3.0-alpha04에는 이 커밋이 포함되어 있습니다.

API 변경사항

  • 이제 SavedState KMP에서 Char를 지원합니다. (I9ac2f, b/334076622)
  • SavedState KMP에 putNullisNull를 추가합니다. (Iea71d, b/334076622)
  • 초기 Map<String, Any>를 지원하는 savedState 팩토리 매개변수를 추가했습니다. (I9b37d, b/334076622)
  • 이제 SavedState KMP에서 contentDeepEquals 비교를 지원합니다. (Ia515c, b/334076622)
  • 이제 SavedState KMP에서 Long을 지원합니다. (I4c180, b/334076622)

버전 1.3.0-alpha03

2024년 10월 16일

androidx.savedstate:savedstate-*:1.3.0-alpha03이 출시되었습니다. 버전 1.3.0-alpha03에는 이러한 커밋이 포함되어 있습니다.

버전 1.3.0-alpha02

2024년 10월 2일

androidx.savedstate:savedstate-*:1.3.0-alpha02이 출시되었습니다. 버전 1.3.0-alpha02에는 이 커밋이 포함되어 있습니다.

Kotlin 멀티플랫폼

  • 이제 SavedState 모듈이 KMP와 호환됩니다. 이제 Android, iOS, Linux, Mac, JVM 데스크톱 환경이 지원되는 플랫폼에 포함됩니다. (I26305, b/334076622)

새로운 기능

  • KMP에서 애플리케이션 상태를 저장하고 복원하는 일관된 방법을 제공하기 위해 추상화로 SavedState 불투명 유형을 도입합니다. 여기에는 저장할 상태를 수정하기 위한 SavedStateReaderSavedStateWriter가 포함됩니다. Android에서 SavedStateBundle의 유형 별칭으로, 바이너리 호환성을 보장하고 기존 API를 공통 소스 세트로 이전하는 것을 용이하게 합니다. 다른 플랫폼에서는 SavedStateMap<String, Any> 인스턴스입니다. (I18575, b/334076622)
  // Create a new SavedState object using the savedState DSL:
  val savedState = savedState {
    putInt("currentPage", 1)
    putString("filter", "favorites")
  }

  // Read from a SavedState object
  val currentPage = savedState.read { getInt("currentPage") }

  // Edit an existing SavedState object
  savedState.write {
    remove("currentPage")
  }

API 변경사항

  • 이제 SavedStateRegistrySavedStateRegistryController가 KMP와 호환됩니다. (Id7bb8, b/334076622)
  • 이제 SavedState, SavedStateWriter, SavedStateReader가 KMP와 호환됩니다. (I26305, b/334076622)

버전 1.3.0-alpha01

2024년 8월 7일

androidx.savedstate:savedstate:1.3.0-alpha01androidx.savedstate:savedstate-ktx:1.3.0-alpha01이 출시되었습니다. 버전 1.3.0-alpha01에는 이 커밋이 포함되어 있습니다.

API 변경사항

  • 이제 savedstate-ktx Kotlin 확장 프로그램이 기본 savedstate 모듈로 이동했습니다. (I1cc18, b/274803094)

참고

  • compileSdk를 35로 업데이트합니다 (5dc41be).

버전 1.2.1

버전 1.2.1

2023년 3월 22일

androidx.savedstate:savedstate:1.2.1androidx.savedstate:savedstate-ktx:1.2.1이 출시되었습니다. 버전 1.2.1에 포함된 커밋을 확인하세요.

종속 항목 업데이트

버전 1.2.0

버전 1.2.0

2022년 6월 29일

androidx.savedstate:savedstate:1.2.0androidx.savedstate:savedstate-ktx:1.2.0이 출시되었습니다. 버전 1.2.0에 포함된 커밋을 확인하세요.

1.1.0 이후 중요 변경사항

  • 이제 SavedStateRegistryControllerperformAttach()를 통해 SavedStateRegistry와 일찍 연결할 수 있습니다.
  • 이제 getSavedStateProvider()를 통해 SavedStateRegistry에서 이전에 등록된 SavedStateProvider를 검색할 수 있습니다.
  • SavedState 라이브러리가 Kotlin으로 다시 작성되었습니다.
    • SavedStateRegistryOwner의 경우 Kotlin으로 작성된 클래스에는 소스와 호환되지 않는 변경사항입니다. 이제 이전 getSavedStateRegistry() 함수를 구현하는 대신 savedStateRegistry 속성을 재정의해야 합니다.
    • ViewTreeSavedStateRegistryOwner의 경우 Kotlin으로 작성된 클래스에는 소스와 호환되지 않는 변경사항입니다. 이제 이전에 설정된 소유자를 설정하고 찾으려면 androidx.savedstate.setViewTreeSavedStateRegistryOwnerandroidx.savedstate.findViewTreeSavedStateRegistryOwnerView에서 Kotlin 확장 메서드를 직접 가져와서 사용해야 합니다. 이는 findViewTreeSavedStateRegistryOwnersavedstate-ktx API를 대체합니다.

동작 변경사항

  • SavedStateRegistry는 저장할 상태가 없는 경우 더 이상 빈 번들을 저장하지 않습니다.

버전 1.2.0-rc01

2022년 5월 11일

androidx.savedstate:savedstate:1.2.0-rc01androidx.savedstate:savedstate-ktx:1.2.0-rc01이 출시되었습니다. 버전 1.2.0-rc01에 포함된 커밋을 확인하세요.

문서 변경사항

  • 인터페이스를 구현하는 방식 또는 SavedStateRegistryController에서 메서드를 호출해야 하는 경우에 대하여 소유자가 갖는 책임 및 계약을 명확하게 설명하기 위하여 SavedStateRegistryOwner Kdoc이 업데이트되었습니다. (Iefc95, b/228887344)

버전 1.2.0-beta01

2022년 4월 20일

androidx.savedstate:savedstate:1.2.0-beta01androidx.savedstate:savedstate-ktx:1.2.0-beta01이 출시되었습니다. 버전 1.2.0-beta01에 포함된 커밋을 확인하세요.

API 변경사항

  • SavedStateRegistryViewTreeSavedStateRegistryOwner 클래스가 Kotlin으로 다시 작성되었습니다. ViewTreeSavedStateRegistryOwner의 경우 Kotlin으로 작성된 클래스에는 소스와 호환되지 않는 변경사항입니다. 이제 이전에 설정된 소유자를 설정하고 찾으려면 androidx.savedstate.setViewTreeSavedStateRegistryOwnerandroidx.savedstate.findViewTreeSavedStateRegistryOwnerView에서 Kotlin 확장 메서드를 직접 가져와서 사용해야 합니다. 이는 findViewTreeSavedStateRegistryOwnersavedstate-ktx API를 대체합니다. 자바 프로그래밍 언어로 작성된 구현의 경우 바이너리와 호환되고 소스와 호환됩니다. (b/220191285)

버전 1.2.0-alpha02

2022년 4월 6일

androidx.savedstate:savedstate:1.2.0-alpha02androidx.savedstate:savedstate-ktx:1.2.0-alpha02가 출시되었습니다. 버전 1.2.0-alpha02에 포함된 커밋을 확인하세요.

새로운 기능

  • 이제 getSavedStateProvider()를 통해 SavedStateRegistry에서 이전에 등록된 SavedStateProvider를 검색할 수 있습니다. (I7ea47, b/215406268)

API 변경사항

  • SavedStateRegistryOwner, SavedStateRegistryController, Recreator 클래스가 Kotlin으로 다시 작성되었습니다. SavedStateRegistryOwner의 경우 Kotlin으로 작성된 클래스에는 소스와 호환되지 않는 변경사항입니다. 이제 이전 getSavedStateRegistry() 함수를 구현하는 대신 savedStateRegistry 속성을 재정의해야 합니다. 자바 프로그래밍 언어로 작성된 구현의 경우 바이너리와 호환되고 소스와 호환됩니다. (b/220191285)

버전 1.2.0-alpha01

2022년 1월 26일

androidx.savedstate:savedstate:1.2.0-alpha01androidx.savedstate:savedstate-ktx:1.2.0-alpha01이 출시되었습니다. 버전 1.2.0-alpha01에 포함된 커밋을 확인하세요.

새로운 기능

  • 이제 SavedStateRegistryControllerperformAttach()를 통해 SavedStateRegistry와 일찍 연결할 수 있습니다. (Ice4bf)

동작 변경사항

  • SavedStateRegistry는 저장할 상태가 없는 경우 더 이상 빈 번들을 저장하지 않습니다. (aosp/1896865, b/203457956)

버전 1.1.0

버전 1.1.0

2021년 2월 10일

androidx.savedstate:savedstate:1.1.0androidx.savedstate:savedstate-ktx:1.1.0이 출시되었습니다. 버전 1.1.0에 포함된 커밋을 확인하세요.

1.0.0 이후 주요 변경사항

  • ViewTreeSavedStateRegistryOwner API: 새로운 ViewTreeSavedStateRegistryOwner.get(View) API를 사용하면 지정된 View 인스턴스에 포함된 SavedStateRegistry를 가져올 수 있습니다. 이를 올바르게 사용하려면 Activity 1.2.0, Fragment 1.3.0, AppCompat 1.3.0-alpha01 이상으로 업그레이드해야 합니다.
  • savedstate-ktx 아티팩트: 새 savedstate-ktx 아티팩트가 ViewTreeSavedStateRegistryOwner와의 호환을 위해 findViewTreeSavedStateRegistryOwner() Kotlin 확장 메서드와 함께 추가되었습니다.

버전 1.1.0-rc01

2020년 12월 16일

androidx.savedstate:savedstate:1.1.0-rc01androidx.savedstate:savedstate-ktx:1.1.0-rc01 버전은 1.1.0-beta01 이후 변경사항 없이 출시되었습니다. 버전 1.1.0-rc01에 포함된 커밋을 확인하세요.

버전 1.1.0-beta01

2020년 10월 1일

androidx.savedstate:savedstate:1.1.0-beta01androidx.savedstate:savedstate-ktx:1.1.0-beta01 버전은 1.1.0-alpha01 이후 변경사항 없이 출시되었습니다. 버전 1.1.0-beta01에 포함된 커밋을 확인하세요.

버전 1.1.0-alpha01

2020년 5월 20일

androidx.savedstate:savedstate:1.1.0-alpha01androidx.savedstate:savedstate-ktx:1.1.0-alpha01가 출시되었습니다. 버전 1.1.0-alpha01에 포함된 커밋을 확인하세요.

새로운 기능

  • 새로운 ViewTreeSavedStateRegistryOwner.get(View) API를 사용하면 View 인스턴스가 지정된 포함 SavedStateRegistry를 검색할 수 있습니다. Activity 1.2.0-alpha05, Fragment 1.3.0-alpha05, AppCompat 1.3.0-alpha01로 업그레이드하여 올바르게 채워야 합니다. (aosp/1298679)
  • ViewTreeSavedStateRegistryOwner 작업을 위해 findViewTreeSavedStateRegistryOwner() Kotlin 확장 프로그램이 있는 새로운 savedstate-ktx 아티팩트가 추가되었습니다. (aosp/1299434)

버전 1.0.0

버전 1.0.0

2019년 9월 5일

androidx.savedstate:savedstate:1.0.0이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

SavedState 1.0.0의 주요 기능

androidx.savedstate에서 안정화 릴리스로 바뀌었습니다. 개발자가 restore/saveInstanceState 프로세스에 구성요소를 플러그인할 수 있는 API 세트입니다. API의 기본 진입점은 SavedStateRegistry이며 consumeRestoredStateForKey를 사용해 이전 savedstate를 검색하고 시스템에서 요청 시 savedstate를 제공하도록 registerSavedStateProvider 콜백을 등록하는 방법을 제공합니다.

버전 1.0.0-rc01

2019년 7월 2일

androidx.savedstate:savedstate:1.0.0-rc01이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

버그 수정

  • 잘못된 proguard 규칙이 수정되었습니다. (b/132655499)

버전 1.0.0-beta01

2019년 5월 7일

androidx.savedstate:savedstate:1.0.0-beta01이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

버전 1.0.0-alpha02

2019년 3월 13일

androidx.savedstate:savedstate:1.0.0-alpha02가 출시되었습니다. androidx.savedstate:savedstate는 savedstate 인프라를 단순화하고 SavedStateRegistry에서 제네릭을 삭제하도록 결정되었기 때문에 아티팩트 androidx.savedstate:savedstate-bundleandroidx.savedstate:savedstate-common을 단일 아티팩트로 결합합니다. 따라서 별도의 모듈이 필요하지 않습니다.

이 버전에 포함된 커밋의 전체 목록은 여기에서 확인할 수 있습니다.

새로운 기능

  • SavedStateRegistry.runOnNextRecreaction(Class<? extends AutoRecreated> clazz )가 추가되었습니다. 소유한 구성요소가 다시 시작되면 제공된 클래스가 인스턴스화되며 AutoRecreated.onRecreated 메서드가 실행됩니다.

API 변경사항

  • SavedStateRegistry<T>에서 제네릭이 삭제되었습니다.
  • AbstractSavedStateRegistry 및 BundlableSavedStateRegistry가 삭제되고 대신 간단한 SavedStateRegistry를 사용합니다.
  • BundleSavedStateRegistryOwner에서 SavedStateRegistryOwner로 이름이 변경되었습니다.

버전 1.0.0-alpha01

2018년 12월 17일

SavedState의 최초 릴리스입니다.

새로운 기능

androidx.savedstate는 개발자가 restore/saveInstanceState 프로세스에 구성요소를 플러그인할 수 있는 새로운 알파 API 세트입니다. API의 기본 진입점은 SavedStateRegistry<T>이며 consumeRestoredStateForKey를 통해 이전 savedstate를 검색하고 시스템에서 요청 시 savedstate를 제공하도록 registerSavedStateProvider 콜백을 등록하는 방법을 제공합니다.