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 改善の参考にさせていただきます。新しい問題が見つかった場合や、このライブラリを改善するアイデアをお持ちの場合は、お知らせください。新しい問題を報告していただく前に、このライブラリの既存の問題をご確認ください。スターボタンをクリックすると、既存の問題に投票できます。

新しい問題を報告する

詳細については、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 で、IBinderSizeSizeFArray<Parcelable>SparseArray<Parcelable>、Serializable(Android)がサポートされるようになりました。(I1ba94b/334076622
  • クラス内の関連フィールドに @Serializable(with = ParcelableSerializer::class) を付けて、Bundle でサポートされている Java 型と Android 型のエンコードとデコードに使用できる KSerializer インスタンスを追加します。(I8c10fI28cafb/376026712
  • findViewTreeSavedStateRegistryOwner を介して取得された SavedStateRegistryOwner インスタンスを、ViewOverlay などのビューの重複しない親を介して解決できるようになりました。重複しないビューの親の詳細については、Core のリリースノートまたは ViewTree.setViewTreeDisjointParent のドキュメントをご覧ください。(Iccb33

API の変更

  • 命名とパッケージの編成を SavedStateRegistryOwnerDelegate とより整合させました。(I8c135b/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 で使用できます。(I6f59fb/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 に簡単に保存できるようになりました(例: ComponentActivityFragment など)を作成して、プロセスの終了と再作成でこれらのクラスが自動的に復元されるようにします。saved デリゲートは遅延型であり、アクセスされるまで init ラムダを呼び出したり、SavedStateRegistry に何も保存したりしません。(I66739b/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 の変更

  • toMapSavedState に追加し、任意の SavedState を通常の Map(シャローコピー)に変換できるようにしました。(I487b9b/334076622
  • SavedState KMP で配列がサポートされるようになりました。(Ic0552b/334076622

バージョン 1.3.0-alpha04

2024 年 10 月 30 日

androidx.savedstate:savedstate-*:1.3.0-alpha04 がリリースされました。バージョン 1.3.0-alpha04 に含まれる commit はこちらをご覧ください。

API の変更

  • SavedState KMP で Char がサポートされるようになりました。(I9ac2fb/334076622
  • SavedState KMP に putNullisNull を追加。(Iea71db/334076622
  • 初期の Map<String, Any> をサポートする savedState ファクトリ パラメータを追加しました。(I9b37db/334076622
  • SavedState KMP で contentDeepEquals の比較がサポートされるようになりました。(Ia515cb/334076622
  • SavedState KMP で Long がサポートされるようになりました。(I4c180b/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 デスクトップ環境が追加されました。(I26305b/334076622

新機能

  • 抽象化として SavedState 不透明型を導入し、KMP でアプリケーションの状態を保存および復元するための一貫した方法を提供します。これには、保存する状態を変更するための SavedStateReaderSavedStateWriter が含まれています。Android では、SavedStateBundle の型エイリアスであり、バイナリ互換性を確保し、既存の API を共通ソースセットに移行しやすくします。他のプラットフォームでは、SavedStateMap<String, Any> インスタンスです。(I18575b/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 に対応しました。(Id7bb8b/334076622
  • SavedStateSavedStateWriterSavedStateReader が KMP に対応しました。(I26305b/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 には、これらの commit が含まれています。

API の変更

  • savedstate-ktx Kotlin 拡張機能がベースの savedstate モジュールに移動されました。(I1cc18b/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 に含まれる commit については、こちらをご覧ください

依存関係の更新

バージョン 1.2.0

バージョン 1.2.0

2022 年 6 月 29 日

androidx.savedstate:savedstate:1.2.0androidx.savedstate:savedstate-ktx:1.2.0 がリリースされました。バージョン 1.2.0 に含まれる commit については、こちらをご覧ください

1.1.0 以降の重要な変更

  • SavedStateRegistryController で、performAttach() による SavedStateRegistry の早期アタッチメントが可能になりました。
  • getSavedStateProvider() を介して、以前に登録した SavedStateProviderSavedStateRegistry から取得できるようになりました。
  • 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 に含まれる commit については、こちらをご覧ください

ドキュメントの変更

  • SavedStateRegistryOwner の Kdocs を更新し、インターフェースを実装する方法や SavedStateRegistryController でメソッドを呼び出すタイミングに関するオーナーの責任と契約を明確にしました。(Iefc95b/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 に含まれる commit については、こちらをご覧ください

API の変更

  • SavedStateRegistryViewTreeSavedStateRegistryOwner の各クラスが Kotlin で書き換えられました。ViewTreeSavedStateRegistryOwner の場合、これは Kotlin で記述されたクラスのソース互換性のない変更です。以前に設定したオーナーを設定、確認するには、androidx.savedstate.setViewTreeSavedStateRegistryOwnerandroidx.savedstate.findViewTreeSavedStateRegistryOwnerView で Kotlin 拡張メソッドを直接インポートして使用する必要があります。これは、findViewTreeSavedStateRegistryOwnersavedstate-ktx API に代わるものです。Java プログラミング言語で記述された実装に対して、バイナリ互換性があり、ソース互換性を維持しています。(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 に含まれる commit については、こちらをご覧ください

新機能

  • getSavedStateProvider() を介して、以前に登録した SavedStateProviderSavedStateRegistry から取得できるようになりました。(I7ea47b/215406268

API の変更

  • SavedStateRegistryOwnerSavedStateRegistryControllerRecreator の各クラスが Kotlin で書き換えられました。SavedStateRegistryOwner の場合、これは Kotlin で記述されたクラスのソース互換性のない変更です。以前の getSavedStateRegistry() 関数を実装する代わりに、savedStateRegistry プロパティをオーバーライドする必要があります。Java プログラミング言語で記述された実装と、バイナリ互換性およびソース互換性があります。(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 に含まれる commit については、こちらをご覧ください

新機能

  • SavedStateRegistryController で、performAttach() による SavedStateRegistry の早期アタッチメントが可能になりました。(Ice4bf

動作の変更

  • SavedStateRegistry は、保存する状態がない場合に空のバンドルを保存しなくなりました。(aosp/1896865b/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.0Fragment 1.3.0AppCompat 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 に含まれる commit については、こちらをご覧ください

新機能

  • 新しい ViewTreeSavedStateRegistryOwner.get(View) API を使用すると、View インスタンスを指定して、含まれている SavedStateRegistry を取得できます。これを正しく入力するには、Activity 1.2.0-alpha05Fragment 1.3.0-alpha05AppCompat 1.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-bundleandroidx.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 にコールバックを登録して、保存された状態をシステムのリクエストに応じて提供します。