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 改善の参考にさせていただきます。新しい問題が見つかった場合や、このライブラリを改善するアイデアをお持ちの場合は、お知らせください。新しい問題を報告していただく前に、このライブラリの既存の問題をご確認ください。スターボタンをクリックすると、既存の問題に投票できます。
詳細については、Issue Tracker のドキュメントをご覧ください。
バージョン 1.3
バージョン 1.3.0-alpha06
2024 年 12 月 11 日
androidx.savedstate:savedstate-*:1.3.0-alpha06
がリリースされました。バージョン 1.3.0-alpha06 に含まれる commit はこちらをご覧ください。
新機能
SavedState
KMP で、IBinder
、Size
、SizeF
、Array<Parcelable>
、SparseArray<Parcelable>
、Serializable(Android)がサポートされるようになりました。(I1ba94、b/334076622)- クラス内の関連フィールドに
@Serializable(with = ParcelableSerializer::class)
を付けて、Bundle でサポートされている Java 型と Android 型のエンコードとデコードに使用できるKSerializer
インスタンスを追加します。(I8c10f、I28caf、b/376026712) findViewTreeSavedStateRegistryOwner
を介して取得されたSavedStateRegistryOwner
インスタンスを、ViewOverlay
などのビューの重複しない親を介して解決できるようになりました。重複しないビューの親の詳細については、Core のリリースノートまたは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 に含まれる commit はこちらをご覧ください。
KotlinX シリアル化のサポート
SavedState
に KotlinX シリアル化のサポートが追加されました。@Serializable
アノテーションが付加されたクラスをSavedState
に変換するには、encodeToSavedState
メソッドとdecodeFromSavedState
メソッドを使用します。返される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) }
また、
saved
(遅延プロパティ デリゲート)も追加され、@Serializable
クラスをSavedStateRegistryOwner
に簡単に保存できるようになりました(例: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 の変更
toMap
をSavedState
に追加し、任意の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 に含まれる commit はこちらをご覧ください。
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 には、これらの commit が含まれています。
バージョン 1.3.0-alpha02
2024 年 10 月 2 日
androidx.savedstate:savedstate-*:1.3.0-alpha02
がリリースされました。バージョン 1.3.0-alpha02 に含まれる commit はこちらをご覧ください。
Kotlin マルチプラットフォーム
SavedState
モジュールが KMP と互換性を持つようになりました。サポートされているプラットフォームに、Android、iOS、Linux、Mac、JVM デスクトップ環境が追加されました。(I26305、b/334076622)
新機能
- 抽象化として
SavedState
不透明型を導入し、KMP でアプリケーションの状態を保存および復元するための一貫した方法を提供します。これには、保存する状態を変更するための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 には、これらの commit が含まれています。
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 に含まれる commit については、こちらをご覧ください。
依存関係の更新
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 に含まれる commit については、こちらをご覧ください。
1.1.0 以降の重要な変更
SavedStateRegistryController
で、performAttach()
によるSavedStateRegistry
の早期アタッチメントが可能になりました。getSavedStateProvider()
を介して、以前に登録したSavedStateProvider
をSavedStateRegistry
から取得できるようになりました。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 に含まれる commit については、こちらをご覧ください。
ドキュメントの変更
SavedStateRegistryOwner
の Kdocs を更新し、インターフェースを実装する方法やSavedStateRegistryController
でメソッドを呼び出すタイミングに関するオーナーの責任と契約を明確にしました。(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 に含まれる commit については、こちらをご覧ください。
API の変更
SavedStateRegistry
、ViewTreeSavedStateRegistryOwner
の各クラスが Kotlin で書き換えられました。ViewTreeSavedStateRegistryOwner
の場合、これは Kotlin で記述されたクラスのソース互換性のない変更です。以前に設定したオーナーを設定、確認するには、androidx.savedstate.setViewTreeSavedStateRegistryOwner
とandroidx.savedstate.findViewTreeSavedStateRegistryOwner
のView
で Kotlin 拡張メソッドを直接インポートして使用する必要があります。これは、findViewTreeSavedStateRegistryOwner
のsavedstate-ktx
API に代わるものです。Java プログラミング言語で記述された実装に対して、バイナリ互換性があり、ソース互換性を維持しています。(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 に含まれる commit については、こちらをご覧ください。
新機能
getSavedStateProvider()
を介して、以前に登録したSavedStateProvider
をSavedStateRegistry
から取得できるようになりました。(I7ea47、b/215406268)
API の変更
SavedStateRegistryOwner
、SavedStateRegistryController
、Recreator
の各クラスが Kotlin で書き換えられました。SavedStateRegistryOwner
の場合、これは Kotlin で記述されたクラスのソース互換性のない変更です。以前のgetSavedStateRegistry()
関数を実装する代わりに、savedStateRegistry
プロパティをオーバーライドする必要があります。Java プログラミング言語で記述された実装と、バイナリ互換性およびソース互換性があります。(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 に含まれる commit については、こちらをご覧ください。
新機能
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 に含まれる commit については、こちらをご覧ください。
新機能
- 新しい
ViewTreeSavedStateRegistryOwner.get(View)
API を使用すると、View
インスタンスを指定して、含まれているSavedStateRegistry
を取得できます。これを正しく入力するには、Activity1.2.0-alpha05
、Fragment1.3.0-alpha05
、AppCompat1.3.0-alpha01
にアップグレードする必要があります(aosp/1298679)。 - 新しい
savedstate-ktx
アーティファクトと、ViewTreeSavedStateRegistryOwner
を操作するためのfindViewTreeSavedStateRegistryOwner()
Kotlin 拡張機能が追加されました(aosp/1299434)。
バージョン 1.0.0
バージョン 1.0.0
2019 年 9 月 5 日
androidx.savedstate:savedstate:1.0.0
がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
SavedState 1.0.0 の主な機能
androidx.savedstate
が安定版リリースに進みました。これは、デベロッパーがコンポーネントを restore / saveInstanceState プロセスにプラグインできるようにする API のセットです。この API のメインのエントリ ポイントは SavedStateRegistry
です。consumeRestoredStateForKey
を使用して以前に保存された状態を取得する方法を提供し、また registerSavedStateProvider
にコールバックを登録して、保存された状態をシステムのリクエストに応じて提供します。
バージョン 1.0.0-rc01
2019 年 7 月 2 日
androidx.savedstate:savedstate:1.0.0-rc01
がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
バグの修正
- 正しくない ProGuard ルールを修正しました(b/132655499)
バージョン 1.0.0-beta01
2019 年 5 月 7 日
androidx.savedstate:savedstate:1.0.0-beta01
がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
バージョン 1.0.0-alpha02
2019 年 3 月 13 日
androidx.savedstate:savedstate:1.0.0-alpha02
がリリースされました。androidx.savedstate:savedstate
は、アーティファクト androidx.savedstate:savedstate-bundle
と androidx.savedstate:savedstate-common
を組み合わせて 1 つのアーティファクトにします。これは、savedstate インフラストラクチャを簡素化し、SavedStateRegistry
からジェネリックを削除することが決まったためです。したがって、個別のモジュールは必要ありません。
このバージョンに含まれるコミットの完全なリストについては、こちらをご覧ください。
新機能
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
を使用して以前に保存された状態を取得する方法を提供し、また registerSavedStateProvider
にコールバックを登録して、保存された状態をシステムのリクエストに応じて提供します。