SavedState

Escribe componentes que se puedan conectar y que guarden el estado de la IU cuando se cierre un proceso y lo restablezcan cuando se reinicie.
Actualización más reciente Versión estable Versión potencial Versión beta Versión alfa
11 de diciembre de 2024 1.2.1 - - 1.3.0-alpha06

Cómo declarar dependencias

Para agregar una dependencia en SavedState, debes agregar el repositorio de Maven de Google a tu proyecto. Consulta el repositorio de Maven de Google para obtener más información.

Agrega las dependencias de los artefactos que necesites en el archivo build.gradle de tu app o módulo:

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

Para obtener más información sobre las dependencias, consulta Cómo agregar dependencias de compilación.

Comentarios

Tus comentarios ayudan a mejorar Jetpack. Avísanos si descubres nuevos errores o tienes ideas para mejorar esta biblioteca. Consulta los errores existentes de esta biblioteca antes de crear uno nuevo. Puedes agregar tu voto a un error existente haciendo clic en el botón de la estrella.

Crear un error nuevo

Consulta la documentación sobre la Herramienta de seguimiento de errores para obtener más información.

Versión 1.3

Versión 1.3.0-alpha06

11 de diciembre de 2024

Lanzamiento de androidx.savedstate:savedstate-*:1.3.0-alpha06. La versión 1.3.0-alpha06 contiene estas confirmaciones.

Nuevas funciones

  • El KMP de SavedState ahora admite IBinder, Size, SizeF, Array<Parcelable>, SparseArray<Parcelable> y Serializable (Android). (I1ba94, b/334076622).
  • Agrega instancias de KSerializer que se puedan usar para codificar o decodificar tipos de Java y Android compatibles con Bundle. Para ello, marca el campo relevante de tu clase con @Serializable(with = ParcelableSerializer::class). (I8c10f, I28caf, b/376026712).
  • Las instancias de SavedStateRegistryOwner recuperadas a través de findViewTreeSavedStateRegistryOwner ahora se pueden resolver a través de elementos superiores disjuntos de una vista, como un ViewOverlay. Consulta las notas de la versión del núcleo o la documentación en ViewTree.setViewTreeDisjointParent para obtener más información sobre los elementos superiores de vista disyuntivos. (Iccb33)

Cambios en la API

  • Se hizo que los nombres y la organización de paquetes sean más coherentes con SavedStateRegistryOwnerDelegate (I8c135, b/376026744).

Versión 1.3.0-alpha05

13 de noviembre de 2024

Lanzamiento de androidx.savedstate:savedstate-*:1.3.0-alpha05. La versión 1.3.0-alpha05 contiene estas confirmaciones.

Compatibilidad con la serialización de KotlinX

  • SavedState ahora incluye compatibilidad con la serialización de KotlinX. Puedes convertir una clase con anotaciones @Serializable en una SavedState con los métodos encodeToSavedState y decodeFromSavedState. El SavedState que se muestra es un Bundle normal en Android y puede ser usado por cualquier API que acepte un 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)
    }
    
  • También incluimos saved, un delegado de propiedades diferidas, para facilitar el almacenamiento de clases @Serializable en un SavedStateRegistryOwner (p.ej., ComponentActivity, Fragment, etc.) y hacer que esas clases se restablezcan automáticamente durante la finalización y la recreación del proceso. Ten en cuenta que el delegado saved es diferido y no llamará a la lambda init ni guardará nada en SavedStateRegistry hasta que se acceda a él. (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")
        }
    }
    
  • Hay un delegado de propiedades saved similar para SavedStateHandle que se agregó en 2.9.0-alpha07 de ciclo de vida.

Cambios en la API

  • Se agregó toMap a SavedState, lo que permite que cualquier SavedState se convierta en un Map normal (copia superficial). (I487b9, b/334076622).
  • El KMP de SavedState ahora admite arrays. (Ic0552, b/334076622).

Versión 1.3.0-alpha04

30 de octubre de 2024

Lanzamiento de androidx.savedstate:savedstate-*:1.3.0-alpha04. La versión 1.3.0-alpha04 contiene estas confirmaciones.

Cambios en la API

Versión 1.3.0-alpha03

16 de octubre de 2024

Lanzamiento de androidx.savedstate:savedstate-*:1.3.0-alpha03 sin cambios notables. La versión 1.3.0-alpha03 contiene estas confirmaciones.

Versión 1.3.0-alpha02

2 de octubre de 2024

Lanzamiento de androidx.savedstate:savedstate-*:1.3.0-alpha02. La versión 1.3.0-alpha02 contiene estas confirmaciones.

Kotlin multiplataforma

  • El módulo SavedState ahora es compatible con KMP. Las plataformas compatibles ahora incluyen entornos de escritorio de Android, iOS, Linux, Mac y JVM. (I26305, b/334076622).

Nuevas funciones

  • Se introdujo el tipo opaco SavedState como una abstracción para proporcionar una forma coherente de guardar y restablecer el estado de la aplicación en KMP. Incluye un SavedStateReader y un SavedStateWriter para modificar el estado que se guardará. En Android, SavedState es un alias de tipo para Bundle, lo que garantiza la compatibilidad con objetos binarios y facilita la migración de las APIs existentes a un conjunto de orígenes común. En otras plataformas, SavedState es una instancia de 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")
  }

Cambios en la API

  • SavedStateRegistry y SavedStateRegistryController ahora son compatibles con KMP. (Id7bb8, b/334076622)
  • SavedState, SavedStateWriter y SavedStateReader ahora son compatibles con KMP. (I26305, b/334076622).

Versión 1.3.0-alpha01

7 de agosto de 2024

Lanzamiento de androidx.savedstate:savedstate:1.3.0-alpha01 y androidx.savedstate:savedstate-ktx:1.3.0-alpha01. La versión 1.3.0-alpha01 contiene estas confirmaciones.

Cambios en la API

  • Las extensiones de Kotlin savedstate-ktx ahora se trasladaron al módulo base de SavedState. (I1cc18, b/274803094).

Nota

  • Se actualizó compileSdk a 35 (5dc41be).

Versión 1.2.1

Versión 1.2.1

22 de marzo de 2023

Lanzamiento de androidx.savedstate:savedstate:1.2.1 y androidx.savedstate:savedstate-ktx:1.2.1. La versión 1.2.1 contiene estas confirmaciones.

Actualizaciones de dependencias

Versión 1.2.0

Versión 1.2.0

29 de junio de 2022

Lanzamiento de androidx.savedstate:savedstate:1.2.0 y androidx.savedstate:savedstate-ktx:1.2.0. La versión 1.2.0 contiene estas confirmaciones.

Cambios importantes desde la versión 1.1.0

  • SavedStateRegistryController ahora permite la conexión anticipada de SavedStateRegistry mediante performAttach().
  • Ahora puedes recuperar un SavedStateProvider registrado previamente de un SavedStateRegistry a través de getSavedStateProvider().
  • Se reescribió la biblioteca SavedState en Kotlin.
    • En el caso de SavedStateRegistryOwner, este es un cambio incompatible de la fuente para esas clases escritas en Kotlin; ahora debes anular la propiedad savedStateRegistry en lugar de implementar la función getSavedStateRegistry() anterior.
    • En el caso de ViewTreeSavedStateRegistryOwner, este es un cambio incompatible de la fuente para esas clases escritas en Kotlin. Ahora debes importar y usar directamente los métodos de extensión de Kotlin en View de androidx.savedstate.setViewTreeSavedStateRegistryOwner y androidx.savedstate.findViewTreeSavedStateRegistryOwner para establecer y encontrar un propietario que se haya configurado con anterioridad. Este cambio reemplaza la API de savedstate-ktx de findViewTreeSavedStateRegistryOwner.

Cambios en el comportamiento

  • SavedStateRegistry ya no guarda un Bundle vacío si no hay ningún estado para guardar.

Versión 1.2.0-rc01

11 de mayo de 2022

Lanzamiento de androidx.savedstate:savedstate:1.2.0-rc01 y androidx.savedstate:savedstate-ktx:1.2.0-rc01. La versión 1.2.0-rc01 contiene estas confirmaciones.

Cambios en la documentación

  • Se actualizaron los Kdocs de SavedStateRegistryOwner para aclarar las responsabilidades y los contratos que tiene el propietario sobre la implementación de la interfaz o cuándo debe llamar a los métodos en SavedStateRegistryController (Iefc95, b/228887344).

Versión 1.2.0-beta01

20 de abril de 2022

Lanzamiento de androidx.savedstate:savedstate:1.2.0-beta01 y androidx.savedstate:savedstate-ktx:1.2.0-beta01. La versión 1.2.0-beta01 contiene estas confirmaciones.

Cambios en la API

  • Se reescribieron las clases SavedStateRegistry y ViewTreeSavedStateRegistryOwner en Kotlin. En el caso de ViewTreeSavedStateRegistryOwner, este es un cambio incompatible de la fuente para esas clases escritas en Kotlin. Ahora debes importar y usar directamente los métodos de extensión de Kotlin en View de androidx.savedstate.setViewTreeSavedStateRegistryOwner y androidx.savedstate.findViewTreeSavedStateRegistryOwner para establecer y encontrar un propietario que se haya configurado con anterioridad. Este cambio reemplaza la API de savedstate-ktx de findViewTreeSavedStateRegistryOwner. Esto es compatible a nivel binario y de la fuente para implementaciones escritas en el lenguaje de programación Java (b/220191285).

Versión 1.2.0-alpha02

6 de abril de 2022

Lanzamiento de androidx.savedstate:savedstate:1.2.0-alpha02 y androidx.savedstate:savedstate-ktx:1.2.0-alpha02. La versión 1.2.0-alpha02 contiene estas confirmaciones.

Nuevas funciones

  • Ahora puedes recuperar un SavedStateProvider registrado previamente de un SavedStateRegistry a través de getSavedStateProvider() (I7ea47, b/215406268).

Cambios en la API

  • Se reescribieron las clases SavedStateRegistryOwner, SavedStateRegistryController y Recreator en Kotlin. En el caso de SavedStateRegistryOwner, este es un cambio incompatible de la fuente para esas clases escritas en Kotlin; ahora debes anular la propiedad savedStateRegistry en lugar de implementar la función getSavedStateRegistry() anterior. Esto es compatible a nivel binario y de fuente para implementaciones escritas en el lenguaje de programación Java (b/220191285).

Versión 1.2.0-alpha01

26 de enero de 2022

Lanzamiento de androidx.savedstate:savedstate:1.2.0-alpha01 y androidx.savedstate:savedstate-ktx:1.2.0-alpha01. La versión 1.2.0-alpha01 contiene estas confirmaciones.

Nuevas funciones

  • SavedStateRegistryController ahora permite la conexión anticipada de SavedStateRegistry mediante performAttach() (Ice4bf).

Cambios en el comportamiento

  • SavedStateRegistry ya no guarda un Bundle vacío si no hay ningún estado para guardar. (aosp/1896865, b/203457956).

Versión 1.1.0

Versión 1.1.0

10 de febrero de 2021

Lanzamiento de androidx.savedstate:savedstate:1.1.0 y androidx.savedstate:savedstate-ktx:1.1.0. La versión 1.1.0 contiene estas confirmaciones.

Cambios importantes desde la versión 1.0.0

  • API de ViewTreeSavedStateRegistryOwner: Una nueva API de ViewTreeSavedStateRegistryOwner.get(View) te permite recuperar el SavedStateRegistry contenedor en una determinada instancia de View. Debes actualizar a Activity 1.2.0, Fragment 1.3.0 yAppCompat 1.3.0-alpha01 o versiones posteriores para que la propagación se realice correctamente.
  • Artefacto savedstate-ktx: Se agregó el nuevo artefacto savedstate-ktx con una extensión de Kotlin findViewTreeSavedStateRegistryOwner() a fin de trabajar con ViewTreeSavedStateRegistryOwner.

Versión 1.1.0-rc01

16 de diciembre de 2020

Lanzamiento de androidx.savedstate:savedstate:1.1.0-rc01 y androidx.savedstate:savedstate-ktx:1.1.0-rc01 sin cambios desde 1.1.0-beta01. La versión 1.1.0-rc01 contiene estas confirmaciones.

Versión 1.1.0-beta01

1 de octubre de 2020

Lanzamiento de androidx.savedstate:savedstate:1.1.0-beta01 y androidx.savedstate:savedstate-ktx:1.1.0-beta01 sin cambios desde 1.1.0-alpha01. La versión 1.1.0-beta01 contiene estas confirmaciones.

Versión 1.1.0-alpha01

20 de mayo de 2020

Lanzamiento de androidx.savedstate:savedstate:1.1.0-alpha01 y androidx.savedstate:savedstate-ktx:1.1.0-alpha01. La versión 1.1.0-alpha01 contiene estas confirmaciones.

Nuevas funciones

  • Una nueva API de ViewTreeSavedStateRegistryOwner.get(View) te permite recuperar el objeto SavedStateRegistry contenedor dado que tiene una instancia de View. Debes actualizar a Activity 1.2.0-alpha05, Fragment 1.3.0-alpha05 y AppCompat 1.3.0-alpha01 para completarlo correctamente (aosp/1298679).
  • Se agregó el artefacto savedstate-ktx nuevo con una extensión de Kotlin findViewTreeSavedStateRegistryOwner() para trabajar con ViewTreeSavedStateRegistryOwner (aosp/1299434).

Versión 1.0.0

Versión 1.0.0

5 de septiembre de 2019

Lanzamiento de androidx.savedstate:savedstate:1.0.0. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.

Funciones principales de SavedState 1.0.0

Se movió androidx.savedstate a una versión estable. Este es un conjunto de API que permite a los desarrolladores agregar componentes al proceso restore/saveInstanceState. El punto de entrada principal de la API es SavedStateRegistry, que proporciona una forma de recuperar estados guardados previamente usando consumeRestoredStateForKey y registra una devolución de llamada a registerSavedStateProvider para proporcionar un estado guardado una vez que el sistema lo solicita.

Versión 1.0.0-rc01

2 julio de 2019

Lanzamiento de androidx.savedstate:savedstate:1.0.0-rc01. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.

Correcciones de errores

  • Se corrigió la regla de ProGuard incorrecta (b/132655499).

Versión 1.0.0-beta01

7 de mayo de 2019

Lanzamiento de androidx.savedstate:savedstate:1.0.0-beta01. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.

Versión 1.0.0-alpha02

13 de marzo de 2019

Lanzamiento de androidx.savedstate:savedstate:1.0.0-alpha02. androidx.savedstate:savedstate combina los artefactos androidx.savedstate:savedstate-bundle y androidx.savedstate:savedstate-common en un artefacto, ya que se decidió simplificar la infraestructura de estado guardado y quitar los elementos genéricos de SavedStateRegistry. Por lo tanto, no hay necesidad de módulos separados.

Para obtener una lista completa de las confirmaciones incluidas en esta versión, consulta este artículo.

Nuevas funciones

  • Se agregó SavedStateRegistry.runOnNextRecreaction(Class<? extends AutoRecreated> clazz ). Se creará la instancia de la clase determinada y se ejecutará el método AutoRecreated.onRecreated cuando se reinicie el componente propietario.

Cambios en la API

  • Se quitaron los elementos genéricos de SavedStateRegistry<T>.
  • Se quitaron AbstractSavedStateRegistry y BundlableSavedStateRegistry. En su lugar, usa SavedStateRegistry.
  • Se cambió el nombre de BundleSavedStateRegistryOwner por SavedStateRegistryOwner.

Versión 1.0.0-alpha01

17 de diciembre de 2018

Esta es la primera versión de SavedState.

Nuevas funciones

androidx.savedstate es un nuevo conjunto de API Alfa que permite a los desarrolladores agregar componentes al proceso restore/saveInstanceState. El punto de entrada principal de la API es SavedStateRegistry<T>, que proporciona una manera de recuperar un estado guardado anteriormente mediante consumeRestoredStateForKey y registra una devolución de llamada a registerSavedStateProvider para proporcionar un estado guardado una vez que el sistema lo solicite.