Savedstate

Napisz komponenty z możliwością podłączania, które zapisują stan interfejsu po zakończeniu procesu i przywracają go po jego ponownym uruchomieniu.
Ostatnia aktualizacja Wersja stabilna Wersja kandydująca Wersja Beta Wersja alfa
11 grudnia 2024 r. 1.2.1 - - 1.3.0-alpha06

Deklarowanie zależności

Aby dodać zależność od SavedState, musisz dodać repozytorium Google Maven do projektu. Więcej informacji znajdziesz w repozytorium Maven firmy Google.

Dodaj zależności dla artefaktów, których potrzebujesz, w pliku build.gradle aplikacji lub modułu:

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

Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.

Opinia

Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli zauważysz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nowy problem, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz dodać swój głos do istniejącego problemu, klikając przycisk z gwiazdką.

Tworzenie nowego zgłoszenia

Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.

Wersja 1.3

Wersja 1.3.0-alpha06

11 grudnia 2024 r.

androidx.savedstate:savedstate-*:1.3.0-alpha06 został zwolniony. Wersja 1.3.0-alpha06 zawiera te komity.

Nowe funkcje

  • SavedState KMP obsługuje teraz: IBinder, Size, SizeF, Array<Parcelable>, SparseArray<Parcelable> i Serializable (Android). (I1ba94, b/334076622)
  • Dodaj instancje KSerializer, które można wykorzystać do kodowania/dekodowania typów Java i Androida obsługiwanych przez pakiet, zaznaczając odpowiednie pole w klasie za pomocą @Serializable(with = ParcelableSerializer::class). (I8c10f, I28caf, b/376026712)
  • Instanse SavedStateRegistryOwner pobrane za pomocą findViewTreeSavedStateRegistryOwner można teraz rozwiązywać za pomocą niespójnych elementów nadrzędnych widoku, takich jak ViewOverlay. Aby dowiedzieć się więcej o niepowiązanych rodzicach widoku, zapoznaj się z informacjami o wersji głównej lub z dokumentacją w ViewTree.setViewTreeDisjointParent. (Iccb33)

Zmiany w interfejsie API

  • Ujednolicić nazewnictwo i organizację pakietów z poziomem SavedStateRegistryOwnerDelegate (I8c135, b/376026744)

Wersja 1.3.0-alpha05

13 listopada 2024 r.

androidx.savedstate:savedstate-*:1.3.0-alpha05 został zwolniony. Wersja 1.3.0-alpha05 zawiera te komity.

Obsługa serializacji KotlinX

  • SavedState obsługuje teraz serializację KotlinX. Za pomocą metod encodeToSavedStatedecodeFromSavedState możesz przekonwertować klasę z annotacjami @Serializable na klasę SavedState. Zwrócony SavedState to zwykły Bundle na Androidzie i może być używany przez dowolny interfejs API, który akceptuje Bundle. (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)
    }
    
  • Dodaliśmy też saved, czyli metodę delegowaną z nieobliczalną wartością zwracaną, która ułatwia przechowywanie klas @Serializable w obiekcie SavedStateRegistryOwner (np. ComponentActivity, Fragment itp.) i automatycznie przywracać te klasy po zakończeniu i ponownym uruchomieniu procesu. Delegate saved jest leniwy i nie wywoła funkcji lambda init ani nie zapisze niczego w tablicy SavedStateRegistry, dopóki nie uzyska do niej dostępu. (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")
        }
    }
    
  • Cyklu życia 2.9.0-alpha07 dodano podobną usługę zastępczą dla właściwości saved.SavedStateHandle

Zmiany w interfejsie API

  • Dodaj toMap do SavedState, aby umożliwić konwersję dowolnego SavedState na zwykły Map (płytka kopia). (I487b9, b/334076622)
  • SavedState KMP obsługuje teraz tablice. (Ic0552, b/334076622)

Wersja 1.3.0-alpha04

30 października 2024 r.

androidx.savedstate:savedstate-*:1.3.0-alpha04 został zwolniony. Wersja 1.3.0-alpha04 zawiera te komity.

Zmiany w interfejsie API

Wersja 1.3.0-alpha03

16 października 2024 r.

androidx.savedstate:savedstate-*:1.3.0-alpha03 jest publikowana bez istotnych zmian. Wersja 1.3.0-alpha03 zawiera te komity.

Wersja 1.3.0-alpha02

2 października 2024 r.

androidx.savedstate:savedstate-*:1.3.0-alpha02 został zwolniony. Wersja 1.3.0-alpha02 zawiera te komity.

Kotlin Multiplatform

  • Moduł SavedState jest teraz zgodny z KMP. Obsługiwane platformy to teraz Android, iOS, Linux, Mac i środowiska pulpitu JVM. (I26305, b/334076622)

Nowe funkcje

  • Wprowadzenie typu SavedState jako abstrakcji, aby zapewnić spójny sposób zapisywania i przywracania stanu aplikacji w KMP. Zawiera on SavedStateReaderSavedStateWriter do modyfikowania stanu, który ma zostać zapisany. Na Androidzie SavedState to alias typu dla Bundle, który zapewnia zgodność binarną i ułatwia migrację dotychczasowych interfejsów API do wspólnego zestawu źródeł. Na innych platformach SavedState to instancja 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")
  }

Zmiany w interfejsie API

  • SavedStateRegistrySavedStateRegistryController są teraz zgodne z KPM. (Id7bb8, b/334076622)
  • Funkcje SavedState, SavedStateWriter i SavedStateReader są teraz zgodne z KMP. (I26305, b/334076622)

Wersja 1.3.0-alpha01

7 sierpnia 2024 r.

androidx.savedstate:savedstate:1.3.0-alpha01androidx.savedstate:savedstate-ktx:1.3.0-alpha01 są dostępne. Wersja 1.3.0-alpha01 zawiera te komity.

Zmiany w interfejsie API

  • Rozszerzenia savedstate-ktx w języku Kotlin zostały przeniesione do podstawowego modułu zapisanych stanów. (I1cc18, b/274803094)

Uwaga

  • Zaktualizuj compileSdk do wersji 35 (5dc41be)

Wersja 1.2.1

Wersja 1.2.1

22 marca 2023 r.

androidx.savedstate:savedstate:1.2.1androidx.savedstate:savedstate-ktx:1.2.1 są dostępne. Wersja 1.2.1 zawiera te zatwierdzenia.

Aktualizacje zależności

Wersja 1.2.0

Wersja 1.2.0

29 czerwca 2022 r.

androidx.savedstate:savedstate:1.2.0androidx.savedstate:savedstate-ktx:1.2.0 są dostępne. Wersja 1.2.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 1.1.0

  • SavedStateRegistryController umożliwia teraz wcześniejsze dołączanie SavedStateRegistry za pomocą performAttach().
  • Możesz teraz pobrać wcześniej zarejestrowany SavedStateProviderSavedStateRegistry za pomocą getSavedStateProvider().
  • Biblioteka SavedState została przepisana w języku Kotlin.
    • W przypadku SavedStateRegistryOwner jest to zmiana niezgodna ze źródłem w klasach napisanych w Kotlinie – teraz musisz zastąpić właściwość savedStateRegistry, a nie implementować poprzedniej funkcji getSavedStateRegistry().
    • W przypadku ViewTreeSavedStateRegistryOwner jest to zmiana niezgodna ze źródłem w przypadku klas napisanych w Kotlinie – teraz musisz bezpośrednio zaimportować i użyć metod rozszerzenia Kotlina w View klasy androidx.savedstate.setViewTreeSavedStateRegistryOwnerandroidx.savedstate.findViewTreeSavedStateRegistryOwner, aby ustawić i znaleźć wcześniej ustawionego właściciela. Zastępuje on interfejs API savedstate-ktx usługi findViewTreeSavedStateRegistryOwner.

Zmiany w zachowaniu

  • SavedStateRegistry nie zapisuje już pustego pakietu, jeśli nie ma stanu do zapisania.

Wersja 1.2.0-rc01

11 maja 2022 roku

androidx.savedstate:savedstate:1.2.0-rc01androidx.savedstate:savedstate-ktx:1.2.0-rc01 są dostępne. Wersja 1.2.0-rc01 zawiera te zatwierdzenia.

Zmiany w dokumentacji

  • Dokumenty SavedStateRegistryOwner Kdocs zostały zaktualizowane, aby wyjaśnić obowiązki i umowę właściciela dotyczącą tego, jak powinien on implementować interfejs lub kiedy powinien wywoływać metody w SavedStateRegistryController. (Iefc95, b/228887344)

Wersja 1.2.0-beta01

20 kwietnia 2022 r.

androidx.savedstate:savedstate:1.2.0-beta01androidx.savedstate:savedstate-ktx:1.2.0-beta01 są dostępne. Wersja 1.2.0-beta01 zawiera te commity.

Zmiany w interfejsie API

  • Klasy SavedStateRegistryViewTreeSavedStateRegistryOwner zostały przepisane w Kotlinie. W przypadku ViewTreeSavedStateRegistryOwner jest to zmiana niezgodna ze źródłem w przypadku klas napisanych w Kotlinie – teraz musisz bezpośrednio zaimportować i użyć metod rozszerzenia Kotlina w View klasy androidx.savedstate.setViewTreeSavedStateRegistryOwnerandroidx.savedstate.findViewTreeSavedStateRegistryOwner, aby ustawić i znaleźć wcześniej ustawionego właściciela. Zastępuje on interfejs API savedstate-ktx usługi findViewTreeSavedStateRegistryOwner. Jest on zgodny z binarnymi implementacjami w języku Java i nadal zgodny ze źródłami. (b/220191285)

Wersja 1.2.0-alpha02

6 kwietnia 2022 roku

androidx.savedstate:savedstate:1.2.0-alpha02androidx.savedstate:savedstate-ktx:1.2.0-alpha02 są dostępne. Wersja 1.2.0-alpha02 zawiera te commity.

Nowe funkcje

  • Możesz teraz pobrać wcześniej zarejestrowany SavedStateProviderSavedStateRegistry za pomocą getSavedStateProvider(). (I7ea47, b/215406268)

Zmiany w interfejsie API

  • Klasy SavedStateRegistryOwner, SavedStateRegistryControllerRecreator zostały przepisane w Kotlinie. W przypadku SavedStateRegistryOwner jest to zmiana niezgodna ze źródłem w klasach napisanych w Kotlinie – teraz musisz zastąpić właściwość savedStateRegistry, a nie stosować poprzedniej funkcji getSavedStateRegistry(). Jest to wersja zgodna z binarną i źródłową implementacją w języku programowania Java. (b/220191285)

Wersja 1.2.0-alpha01

26 stycznia 2022 r.

androidx.savedstate:savedstate:1.2.0-alpha01androidx.savedstate:savedstate-ktx:1.2.0-alpha01 są dostępne. Wersja 1.2.0-alpha01 zawiera te commity.

Nowe funkcje

  • SavedStateRegistryController umożliwia teraz wczesne załączanie SavedStateRegistry za pomocą performAttach(). (Ice4bf)

Zmiany w zachowaniu

  • SavedStateRegistry nie zapisuje już pustego pakietu, jeśli nie ma stanu do zapisania. (aosp/1896865, b/203457956)

Wersja 1.1.0

Wersja 1.1.0

10 lutego 2021 r.

androidx.savedstate:savedstate:1.1.0androidx.savedstate:savedstate-ktx:1.1.0 są dostępne. Wersja 1.1.0 zawiera te zatwierdzenia.

Najważniejsze zmiany od wersji 1.0.0

  • Interfejs API ViewTreeSavedStateRegistryOwner: nowy interfejs API ViewTreeSavedStateRegistryOwner.get(View) umożliwia pobieranie elementów SavedStateRegistry z uwzględnieniem instancji View. Aby prawidłowo wypełnić te pola, musisz uaktualnić te elementy: Activity 1.2.0, Fragment 1.3.0AppCompat 1.3.0-alpha01 lub nowsze.
  • Element savedstate-ktx: dodaliśmy nowy element savedstate-ktx z rozszerzeniem Kotlina findViewTreeSavedStateRegistryOwner() do pracy z ViewTreeSavedStateRegistryOwner.

Wersja 1.1.0-rc01

16 grudnia 2020 roku

androidx.savedstate:savedstate:1.1.0-rc01androidx.savedstate:savedstate-ktx:1.1.0-rc01 są publikowane bez zmian od 1.1.0-beta01. Wersja 1.1.0-rc01 zawiera te zatwierdzenia.

Wersja 1.1.0-beta01

1 października 2020 roku

androidx.savedstate:savedstate:1.1.0-beta01androidx.savedstate:savedstate-ktx:1.1.0-beta01 są publikowane bez zmian od 1.1.0-alpha01. Wersja 1.1.0-beta01 zawiera te commity.

Wersja 1.1.0-alpha01

20 maja 2020 r.

androidx.savedstate:savedstate:1.1.0-alpha01androidx.savedstate:savedstate-ktx:1.1.0-alpha01 są dostępne. Wersja 1.1.0-alpha01 zawiera te commity.

Nowe funkcje

Wersja 1.0.0

Wersja 1.0.0

5 września 2019 r.

androidx.savedstate:savedstate:1.0.0 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Najważniejsze funkcje SavedState 1.0.0

androidx.savedstate została oznaczona jako wersja stabilna. To zestaw interfejsów API, które umożliwiają deweloperom dołączanie komponentów do procesu przywracania / zapisu stanu instancji. Głównym punktem wejścia interfejsu API jest metoda SavedStateRegistry, która umożliwia odzyskiwanie wcześniej zapisanych stanów za pomocą metody consumeRestoredStateForKey i rejestrowanie wywołania zwrotnego registerSavedStateProvider, aby udostępnić zapisany stan, gdy system go zażąda.

Wersja 1.0.0-rc01

2 lipca 2019 r.

androidx.savedstate:savedstate:1.0.0-rc01 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Naprawiono nieprawidłową regułę proguard (b/132655499)

Wersja 1.0.0-beta01

7 maja 2019 r.

androidx.savedstate:savedstate:1.0.0-beta01 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Wersja 1.0.0-alpha02

13 marca 2019 r.

androidx.savedstate:savedstate:1.0.0-alpha02 został zwolniony. androidx.savedstate:savedstate łączy artefakty androidx.savedstate:savedstate-bundleandroidx.savedstate:savedstate-common w jeden artefakt, ponieważ podjęliśmy decyzję o uproszczeniu infrastruktury zapisanego stanu i usunięciu elementów ogólnych z SavedStateRegistry. Dlatego nie ma potrzeby tworzenia osobnych modułów.

Pełną listę zatwierdzeń zawartych w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Dodano użytkownika SavedStateRegistry.runOnNextRecreaction(Class<? extends AutoRecreated> clazz ) Podana klasa zostanie uruchomiona, a metoda AutoRecreated.onRecreated zostanie wykonana po ponownym uruchomieniu komponentu właściciela.

Zmiany w interfejsie API

  • Generyki usunięte z: SavedStateRegistry<T>
  • AbstractSavedStateRegistry & BundlableSavedStateRegistry zostały usunięte. Zamiast nich użyj prostego SavedStateRegistry.
  • Zmieniono nazwę z BundleSavedStateRegistryOwner na SavedStateRegistryOwner

Wersja 1.0.0-alpha01

17 grudnia 2018 r.

To pierwsza wersja SavedState.

Nowe funkcje

androidx.savedstate to nowy zestaw interfejsów API w wersji alfa, które umożliwiają deweloperom dołączanie komponentów do procesu przywracania lub zapisywania stanu instancji. Głównym punktem wejścia interfejsu API jest SavedStateRegistry<T>, który umożliwia odzyskiwanie wcześniej zapisanego stanu za pomocą consumeRestoredStateForKey i rejestrowanie wywołania zwrotnego registerSavedStateProvider w celu udostępniania zapisanego stanu, gdy system go zażąda.