Savedstate

Schreiben Sie Plug-in-Komponenten, die den UI-Status speichern, wenn ein Prozess beendet wird, und ihn wiederherstellen, wenn der Prozess neu gestartet wird.
Letzte Aktualisierung Stabile Version Release Candidate Beta-Ausgabe Alphaversion
11. Dezember 2024 1.2.1 - - 1.3.0-alpha06

Abhängigkeiten deklarieren

Wenn Sie eine Abhängigkeit von SavedState hinzufügen möchten, müssen Sie Ihrem Projekt das Google Maven-Repository hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.

Fügen Sie der Datei build.gradle für Ihre App oder Ihr Modul die Abhängigkeiten für die erforderlichen Artefakte hinzu:

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")
}

Weitere Informationen zu Abhängigkeiten finden Sie unter Build-Abhängigkeiten hinzufügen.

Feedback

Ihr Feedback hilft uns, Jetpack zu verbessern. Bitte teilen Sie uns mit, wenn Sie neue Probleme feststellen oder Ideen zur Verbesserung dieser Bibliothek haben. Sehen Sie sich die vorhandenen Probleme in dieser Bibliothek an, bevor Sie ein neues erstellen. Sie können einem vorhandenen Problem Ihre Stimme geben, indem Sie auf die Schaltfläche mit dem Stern klicken.

Neues Problem erstellen

Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.

Version 1.3

Version 1.3.0-alpha06

11. Dezember 2024

androidx.savedstate:savedstate-*:1.3.0-alpha06 wird veröffentlicht. Version 1.3.0-alpha06 enthält diese Commits.

Neue Funktionen

  • SavedState KMP unterstützt jetzt: IBinder, Size, SizeF, Array<Parcelable>, SparseArray<Parcelable> und Serializable (Android). (I1ba94, b/334076622)
  • Fügen Sie KSerializer-Instanzen hinzu, die zum Codieren/Decodieren von Java- und Android-Typen verwendet werden können, die von Bundle unterstützt werden. Markieren Sie dazu das entsprechende Feld in Ihrer Klasse mit @Serializable(with = ParcelableSerializer::class). (I8c10f, I28caf, b/376026712)
  • SavedStateRegistryOwner-Instanzen, die über findViewTreeSavedStateRegistryOwner abgerufen werden, können jetzt über nicht übereinstimmende übergeordnete Elemente einer Ansicht aufgelöst werden, z. B. über ViewOverlay. Weitere Informationen zu überlappenden Ansichtsübergeordneten finden Sie in den Releasehinweisen von Core oder in der Dokumentation unter ViewTree.setViewTreeDisjointParent. (Iccb33)

API-Änderungen

  • Namen und Paketorganisation an SavedStateRegistryOwnerDelegate (I8c135, b/376026744) anpassen

Version 1.3.0-alpha05

13. November 2024

androidx.savedstate:savedstate-*:1.3.0-alpha05 wird veröffentlicht. Version 1.3.0-alpha05 enthält diese Commits.

Unterstützung für KotlinX-Serialisierung

  • SavedState unterstützt jetzt die KotlinX-Serialisierung. Sie können eine mit @Serializable annotierte Klasse mit den Methoden encodeToSavedState und decodeFromSavedState in einen SavedState konvertieren. Die zurückgegebene SavedState ist eine reguläre Bundle unter Android und kann von jeder API verwendet werden, die eine Bundle akzeptiert. (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)
    }
    
  • Außerdem haben wir saved hinzugefügt, ein Lazy-Property-Delegate, mit dem sich @Serializable-Klassen ganz einfach in einer SavedStateRegistryOwner speichern lassen (z.B. ComponentActivity, Fragment usw.) und diese Klassen automatisch wiederherstellen lassen, wenn der Prozess beendet und neu erstellt wird. Hinweis: Der saved-Delegierte ist lausig und ruft die init-Lambda-Funktion nicht auf und speichert nichts in der SavedStateRegistry, bis darauf zugegriffen wird. (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")
        }
    }
    
  • Für SavedStateHandle gibt es einen ähnlichen saved-Property-Delegierten, der im Lifecycle 2.9.0-alpha07 hinzugefügt wurde.

API-Änderungen

  • Fügen Sie toMap zu SavedState hinzu, damit alle SavedState in eine reguläre Map (flache Kopie) umgewandelt werden können. (I487b9, b/334076622)
  • SavedState KMP unterstützt jetzt Arrays. (Ic0552, b/334076622)

Version 1.3.0-alpha04

30. Oktober 2024

androidx.savedstate:savedstate-*:1.3.0-alpha04 wird veröffentlicht. Version 1.3.0-alpha04 enthält diese Commits.

API-Änderungen

Version 1.3.0-alpha03

16. Oktober 2024

androidx.savedstate:savedstate-*:1.3.0-alpha03 wird ohne nennenswerte Änderungen veröffentlicht. Version 1.3.0-alpha03 enthält diese Commits.

Version 1.3.0-alpha02

2. Oktober 2024

androidx.savedstate:savedstate-*:1.3.0-alpha02 wird veröffentlicht. Version 1.3.0-alpha02 enthält diese Commits.

Kotlin Multiplatform

  • Das SavedState-Modul ist jetzt KMP-kompatibel. Zu den unterstützten Plattformen gehören jetzt Android, iOS, Linux, Mac und JVM-Desktopumgebungen. (I26305, b/334076622)

Neue Funktionen

  • Einführung des SavedState-Typs als Abstraktion, um den Anwendungsstatus in KMP konsistent zu speichern und wiederherzustellen. Es enthält SavedStateReader und SavedStateWriter zum Ändern des zu speichernden Status. Unter Android ist SavedState ein Typalias für Bundle, der die Binärkompatibilität sicherstellt und die Migration vorhandener APIs zu einem gemeinsamen Quellsatz erleichtert. Auf anderen Plattformen ist SavedState eine Map<String, Any>-Instanz. (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-Änderungen

  • SavedStateRegistry und SavedStateRegistryController sind jetzt KMP-kompatibel. (Id7bb8, b/334076622)
  • SavedState, SavedStateWriter und SavedStateReader sind jetzt KMP-kompatibel. (I26305, b/334076622)

Version 1.3.0-alpha01

7. August 2024

androidx.savedstate:savedstate:1.3.0-alpha01 und androidx.savedstate:savedstate-ktx:1.3.0-alpha01 werden freigegeben. Version 1.3.0-alpha01 enthält diese Commits.

API-Änderungen

  • Die savedstate-ktx-Kotlin-Erweiterungen wurden in das Basismodul „savedstate“ verschoben. (I1cc18, b/274803094)

Hinweis

  • compileSdk auf 35 (5dc41be) aktualisieren

Version 1.2.1

Version 1.2.1

22. März 2023

androidx.savedstate:savedstate:1.2.1 und androidx.savedstate:savedstate-ktx:1.2.1 werden freigegeben. Version 1.2.1 enthält diese Commits.

Abhängigkeitsupdates

Version 1.2.0

Version 1.2.0

29. Juni 2022

androidx.savedstate:savedstate:1.2.0 und androidx.savedstate:savedstate-ktx:1.2.0 werden freigegeben. Version 1.2.0 enthält diese Commits.

Wichtige Änderungen seit Version 1.1.0

  • SavedStateRegistryController ermöglicht jetzt die frühzeitige Verknüpfung der SavedStateRegistry über performAttach().
  • Sie können jetzt eine zuvor registrierte SavedStateProvider über getSavedStateProvider() von einem SavedStateRegistry abrufen.
  • Die SavedState-Bibliothek wurde in Kotlin neu geschrieben.
    • Bei SavedStateRegistryOwner handelt es sich um eine nicht mit der Quelle kompatible Änderung für Klassen, die in Kotlin geschrieben wurden. Sie müssen jetzt die Property savedStateRegistry überschreiben, anstatt die vorherige getSavedStateRegistry()-Funktion zu implementieren.
    • Für ViewTreeSavedStateRegistryOwner ist dies eine nicht mit der Quelle kompatible Änderung für Klassen, die in Kotlin geschrieben wurden. Sie müssen jetzt die Kotlin-Erweiterungsmethoden für View von androidx.savedstate.setViewTreeSavedStateRegistryOwner und androidx.savedstate.findViewTreeSavedStateRegistryOwner direkt importieren und verwenden, um einen zuvor festgelegten Inhaber festzulegen und zu finden. Damit wird die savedstate-ktx API von findViewTreeSavedStateRegistryOwner ersetzt.

Verhaltensänderungen

  • SavedStateRegistry speichert kein leeres Bundle mehr, wenn kein Status gespeichert werden kann.

Version 1.2.0-rc01

11. Mai 2022

androidx.savedstate:savedstate:1.2.0-rc01 und androidx.savedstate:savedstate-ktx:1.2.0-rc01 werden freigegeben. Version 1.2.0-rc01 enthält diese Commits.

Änderungen an der Dokumentation

  • Die SavedStateRegistryOwner-KDocs wurden aktualisiert, um die Verantwortlichkeiten und den Vertrag des Inhabers zu klären, wie er die Benutzeroberfläche implementieren oder wann er die Methoden auf SavedStateRegistryController aufrufen soll. (Iefc95, b/228887344)

Version 1.2.0-beta01

20. April 2022

androidx.savedstate:savedstate:1.2.0-beta01 und androidx.savedstate:savedstate-ktx:1.2.0-beta01 werden freigegeben. Version 1.2.0-beta01 enthält diese Commits.

API-Änderungen

  • Die Klassen SavedStateRegistry und ViewTreeSavedStateRegistryOwner wurden in Kotlin neu geschrieben. Für ViewTreeSavedStateRegistryOwner ist dies eine nicht mit der Quelle kompatible Änderung für Klassen, die in Kotlin geschrieben sind. Sie müssen jetzt die Kotlin-Erweiterungsmethoden für View von androidx.savedstate.setViewTreeSavedStateRegistryOwner und androidx.savedstate.findViewTreeSavedStateRegistryOwner direkt importieren und verwenden, um einen zuvor festgelegten Inhaber festzulegen und zu finden. Damit wird die savedstate-ktx API von findViewTreeSavedStateRegistryOwner ersetzt. Dies ist binärkompatibel und bleibt für Implementierungen, die in der Programmiersprache Java geschrieben sind, auch weiterhin quellkompatibel. (b/220191285)

Version 1.2.0-alpha02

6. April 2022

androidx.savedstate:savedstate:1.2.0-alpha02 und androidx.savedstate:savedstate-ktx:1.2.0-alpha02 werden freigegeben. Version 1.2.0-alpha02 enthält diese Commits.

Neue Funktionen

  • Sie können jetzt eine zuvor registrierte SavedStateProvider über getSavedStateProvider() von einem SavedStateRegistry abrufen. (I7ea47, b/215406268)

API-Änderungen

  • Die Klassen SavedStateRegistryOwner, SavedStateRegistryController und Recreator wurden in Kotlin neu geschrieben. Bei SavedStateRegistryOwner handelt es sich um eine nicht mit der Quelle kompatible Änderung für diese in Kotlin geschriebenen Klassen. Sie müssen jetzt die Property savedStateRegistry überschreiben, anstatt die vorherige getSavedStateRegistry()-Funktion zu implementieren. Dies ist binär- und quellkompatibel für Implementierungen, die in der Programmiersprache Java geschrieben sind. (b/220191285)

Version 1.2.0-alpha01

26. Januar 2022

androidx.savedstate:savedstate:1.2.0-alpha01 und androidx.savedstate:savedstate-ktx:1.2.0-alpha01 werden freigegeben. Version 1.2.0-alpha01 enthält diese Commits.

Neue Funktionen

  • SavedStateRegistryController ermöglicht jetzt die frühzeitige Verknüpfung der SavedStateRegistry über performAttach(). (Ice4bf)

Verhaltensänderungen

  • SavedStateRegistry speichert kein leeres Bundle mehr, wenn kein Status gespeichert werden kann. (aosp/1896865, b/203457956)

Version 1.1.0

Version 1.1.0

10. Februar 2021

androidx.savedstate:savedstate:1.1.0 und androidx.savedstate:savedstate-ktx:1.1.0 werden freigegeben. Version 1.1.0 enthält diese Commits.

Wichtige Änderungen seit Version 1.0.0

  • ViewTreeSavedStateRegistryOwner API: Mit einer neuen ViewTreeSavedStateRegistryOwner.get(View) API können Sie die enthaltene SavedStateRegistry anhand einer View-Instanz abrufen. Sie müssen auf Activity 1.2.0, Fragment 1.3.0 und AppCompat 1.3.0-alpha01 oder höher umstellen, um diese Informationen korrekt einzugeben.
  • savedstate-ktx-Artefakt: Dem neuen savedstate-ktx-Artefakt wurde eine findViewTreeSavedStateRegistryOwner()-Kotlin-Erweiterung für die Arbeit mit ViewTreeSavedStateRegistryOwner hinzugefügt.

Version 1.1.0-rc01

16. Dezember 2020

androidx.savedstate:savedstate:1.1.0-rc01 und androidx.savedstate:savedstate-ktx:1.1.0-rc01 werden seit 1.1.0-beta01 unverändert veröffentlicht. Version 1.1.0-rc01 enthält diese Commits.

Version 1.1.0-beta01

1. Oktober 2020

androidx.savedstate:savedstate:1.1.0-beta01 und androidx.savedstate:savedstate-ktx:1.1.0-beta01 werden seit 1.1.0-alpha01 unverändert veröffentlicht. Version 1.1.0-beta01 enthält diese Commits.

Version 1.1.0-alpha01

20. Mai 2020

androidx.savedstate:savedstate:1.1.0-alpha01 und androidx.savedstate:savedstate-ktx:1.1.0-alpha01 werden freigegeben. Version 1.1.0-alpha01 enthält diese Commits.

Neue Funktionen

  • Mit einer neuen ViewTreeSavedStateRegistryOwner.get(View) API können Sie die enthaltene SavedStateRegistry anhand einer View-Instanz abrufen. Sie müssen auf Activity 1.2.0-alpha05, Fragment 1.3.0-alpha05 und AppCompat 1.3.0-alpha01 umstellen, um diese Informationen korrekt einfügen zu können. (aosp/1298679)
  • Dem neuen savedstate-ktx-Artefakt wurde eine findViewTreeSavedStateRegistryOwner()-Kotlin-Erweiterung für die Arbeit mit ViewTreeSavedStateRegistryOwner hinzugefügt. (aosp/1299434)

Version 1.0.0

Version 1.0.0

5. September 2019

androidx.savedstate:savedstate:1.0.0 wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Wichtige Funktionen von SavedState 1.0.0

androidx.savedstate wurde in eine stabile Version überführt. Diese APIs ermöglichen es Entwicklern, Komponenten in den Prozess zum Wiederherstellen / Speichern des Instance-Status einzubinden. Der Haupteingangspunkt der API ist SavedStateRegistry. Über consumeRestoredStateForKey können Sie zuvor gespeicherte Status abrufen und einen Rückruf an registerSavedStateProvider registrieren, um einen gespeicherten Status bereitzustellen, sobald das System ihn anfordert.

Version 1.0.0-rc01

2. Juli 2019

androidx.savedstate:savedstate:1.0.0-rc01 wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Fehlerkorrekturen

Version 1.0.0-beta01

7. Mai 2019

androidx.savedstate:savedstate:1.0.0-beta01 wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Version 1.0.0-alpha02

13. März 2019

androidx.savedstate:savedstate:1.0.0-alpha02 wird veröffentlicht. In androidx.savedstate:savedstate werden die Artefakte androidx.savedstate:savedstate-bundle und androidx.savedstate:savedstate-common zu einem einzigen Artefakt kombiniert, da die SavedState-Infrastruktur vereinfacht und die Generiken aus SavedStateRegistry entfernt wurden. Daher sind keine separaten Module erforderlich.

Eine vollständige Liste der Commits in dieser Version finden Sie hier.

Neue Funktionen

  • SavedStateRegistry.runOnNextRecreaction(Class<? extends AutoRecreated> clazz ) wurde hinzugefügt. Die angegebene Klasse wird instanziiert und die Methode AutoRecreated.onRecreated wird ausgeführt, wenn die übergeordnete Komponente neu gestartet wird.

API-Änderungen

  • Generika aus SavedStateRegistry<T> entfernt
  • AbstractSavedStateRegistry und BundlableSavedStateRegistry wurden entfernt. Verwenden Sie stattdessen einfach SavedStateRegistry.
  • BundleSavedStateRegistryOwner wird in SavedStateRegistryOwner umbenannt

Version 1.0.0-alpha01

17. Dezember 2018

Dies ist die erste Version von SavedState.

Neue Funktionen

androidx.savedstate ist eine neue Reihe von Alpha-APIs, mit denen Entwickler Komponenten in den Prozess zum Wiederherstellen / Speichern des Instance-Status einbinden können. Der Haupteingangspunkt der API ist SavedStateRegistry<T>. Über consumeRestoredStateForKey können Sie den zuvor gespeicherten Status abrufen und einen Rückruf an registerSavedStateProvider registrieren, um den Status bereitzustellen, sobald das System ihn anfordert.