Savedstate
최근 업데이트 | 안정화 버전 | 출시 후보 버전 | 베타 버전 | 알파 버전 |
---|---|---|---|---|
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 직렬화 지원이 포함됩니다.encodeToSavedState
및decodeFromSavedState
메서드를 사용하여@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 변경사항
SavedState
에toMap
를 추가하여 모든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에
putNull
및isNull
를 추가합니다. (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
불투명 유형을 도입합니다. 여기에는 저장할 상태를 수정하기 위한SavedStateReader
및SavedStateWriter
가 포함됩니다. Android에서SavedState
는Bundle
의 유형 별칭으로, 바이너리 호환성을 보장하고 기존 API를 공통 소스 세트로 이전하는 것을 용이하게 합니다. 다른 플랫폼에서는SavedState
가Map<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 변경사항
- 이제
SavedStateRegistry
및SavedStateRegistryController
가 KMP와 호환됩니다. (Id7bb8, b/334076622) - 이제
SavedState
,SavedStateWriter
,SavedStateReader
가 KMP와 호환됩니다. (I26305, b/334076622)
버전 1.3.0-alpha01
2024년 8월 7일
androidx.savedstate:savedstate:1.3.0-alpha01
및 androidx.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.1
및 androidx.savedstate:savedstate-ktx:1.2.1
이 출시되었습니다. 버전 1.2.1에 포함된 커밋을 확인하세요.
종속 항목 업데이트
- 이제
SavedState
가 Lifecycle2.6.1
에 종속됩니다. (c1f621)
버전 1.2.0
버전 1.2.0
2022년 6월 29일
androidx.savedstate:savedstate:1.2.0
및 androidx.savedstate:savedstate-ktx:1.2.0
이 출시되었습니다. 버전 1.2.0에 포함된 커밋을 확인하세요.
1.1.0 이후 중요 변경사항
- 이제
SavedStateRegistryController
가performAttach()
를 통해SavedStateRegistry
와 일찍 연결할 수 있습니다. - 이제
getSavedStateProvider()
를 통해SavedStateRegistry
에서 이전에 등록된SavedStateProvider
를 검색할 수 있습니다. SavedState
라이브러리가 Kotlin으로 다시 작성되었습니다.SavedStateRegistryOwner
의 경우 Kotlin으로 작성된 클래스에는 소스와 호환되지 않는 변경사항입니다. 이제 이전getSavedStateRegistry()
함수를 구현하는 대신savedStateRegistry
속성을 재정의해야 합니다.ViewTreeSavedStateRegistryOwner
의 경우 Kotlin으로 작성된 클래스에는 소스와 호환되지 않는 변경사항입니다. 이제 이전에 설정된 소유자를 설정하고 찾으려면androidx.savedstate.setViewTreeSavedStateRegistryOwner
와androidx.savedstate.findViewTreeSavedStateRegistryOwner
의View
에서 Kotlin 확장 메서드를 직접 가져와서 사용해야 합니다. 이는findViewTreeSavedStateRegistryOwner
의savedstate-ktx
API를 대체합니다.
동작 변경사항
SavedStateRegistry
는 저장할 상태가 없는 경우 더 이상 빈 번들을 저장하지 않습니다.
버전 1.2.0-rc01
2022년 5월 11일
androidx.savedstate:savedstate:1.2.0-rc01
및 androidx.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-beta01
및 androidx.savedstate:savedstate-ktx:1.2.0-beta01
이 출시되었습니다. 버전 1.2.0-beta01에 포함된 커밋을 확인하세요.
API 변경사항
SavedStateRegistry
및ViewTreeSavedStateRegistryOwner
클래스가 Kotlin으로 다시 작성되었습니다.ViewTreeSavedStateRegistryOwner
의 경우 Kotlin으로 작성된 클래스에는 소스와 호환되지 않는 변경사항입니다. 이제 이전에 설정된 소유자를 설정하고 찾으려면androidx.savedstate.setViewTreeSavedStateRegistryOwner
와androidx.savedstate.findViewTreeSavedStateRegistryOwner
의View
에서 Kotlin 확장 메서드를 직접 가져와서 사용해야 합니다. 이는findViewTreeSavedStateRegistryOwner
의savedstate-ktx
API를 대체합니다. 자바 프로그래밍 언어로 작성된 구현의 경우 바이너리와 호환되고 소스와 호환됩니다. (b/220191285)
버전 1.2.0-alpha02
2022년 4월 6일
androidx.savedstate:savedstate:1.2.0-alpha02
및 androidx.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-alpha01
및 androidx.savedstate:savedstate-ktx:1.2.0-alpha01
이 출시되었습니다. 버전 1.2.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
SavedStateRegistryController
가performAttach()
를 통해SavedStateRegistry
와 일찍 연결할 수 있습니다. (Ice4bf)
동작 변경사항
SavedStateRegistry
는 저장할 상태가 없는 경우 더 이상 빈 번들을 저장하지 않습니다. (aosp/1896865, b/203457956)
버전 1.1.0
버전 1.1.0
2021년 2월 10일
androidx.savedstate:savedstate:1.1.0
및 androidx.savedstate:savedstate-ktx:1.1.0
이 출시되었습니다. 버전 1.1.0에 포함된 커밋을 확인하세요.
1.0.0 이후 주요 변경사항
ViewTreeSavedStateRegistryOwner
API: 새로운ViewTreeSavedStateRegistryOwner.get(View)
API를 사용하면 지정된View
인스턴스에 포함된SavedStateRegistry
를 가져올 수 있습니다. 이를 올바르게 사용하려면 Activity1.2.0
, Fragment1.3.0
, AppCompat1.3.0-alpha01
이상으로 업그레이드해야 합니다.savedstate-ktx
아티팩트: 새savedstate-ktx
아티팩트가ViewTreeSavedStateRegistryOwner
와의 호환을 위해findViewTreeSavedStateRegistryOwner()
Kotlin 확장 메서드와 함께 추가되었습니다.
버전 1.1.0-rc01
2020년 12월 16일
androidx.savedstate:savedstate:1.1.0-rc01
및 androidx.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-beta01
및 androidx.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-alpha01
및 androidx.savedstate:savedstate-ktx:1.1.0-alpha01
가 출시되었습니다. 버전 1.1.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
- 새로운
ViewTreeSavedStateRegistryOwner.get(View)
API를 사용하면View
인스턴스가 지정된 포함SavedStateRegistry
를 검색할 수 있습니다. Activity1.2.0-alpha05
, Fragment1.3.0-alpha05
, AppCompat1.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-bundle
및 androidx.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
콜백을 등록하는 방법을 제공합니다.