SavedState
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.
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 admiteIBinder
,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 defindViewTreeSavedStateRegistryOwner
ahora se pueden resolver a través de elementos superiores disjuntos de una vista, como unViewOverlay
. Consulta las notas de la versión del núcleo o la documentación enViewTree.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 unaSavedState
con los métodosencodeToSavedState
ydecodeFromSavedState
. ElSavedState
que se muestra es unBundle
normal en Android y puede ser usado por cualquier API que acepte unBundle
. (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 unSavedStateRegistryOwner
(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 delegadosaved
es diferido y no llamará a la lambdainit
ni guardará nada enSavedStateRegistry
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 paraSavedStateHandle
que se agregó en2.9.0-alpha07
de ciclo de vida.
Cambios en la API
- Se agregó
toMap
aSavedState
, lo que permite que cualquierSavedState
se convierta en unMap
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
- El KMP de SavedState ahora admite Char. (I9ac2f, b/334076622).
- Se agregaron
putNull
yisNull
al KMP de SavedState. (Iea71d, b/334076622). - Se agregaron parámetros de fábrica
savedState
adicionales que admiten unMap<String, Any>
inicial (I9b37d, b/334076622). - El KMP de SavedState ahora admite la comparación
contentDeepEquals
. (Ia515c, b/334076622). - El KMP de SavedState ahora admite Long. (I4c180, b/334076622).
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 unSavedStateReader
y unSavedStateWriter
para modificar el estado que se guardará. En Android,SavedState
es un alias de tipo paraBundle
, 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 deMap<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
ySavedStateRegistryController
ahora son compatibles con KMP. (Id7bb8, b/334076622)SavedState
,SavedStateWriter
ySavedStateReader
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
SavedState
ahora depende de Lifecycle2.6.1
. (c1f621).
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 deSavedStateRegistry
medianteperformAttach()
.- Ahora puedes recuperar un
SavedStateProvider
registrado previamente de unSavedStateRegistry
a través degetSavedStateProvider()
. - 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 propiedadsavedStateRegistry
en lugar de implementar la funcióngetSavedStateRegistry()
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 enView
deandroidx.savedstate.setViewTreeSavedStateRegistryOwner
yandroidx.savedstate.findViewTreeSavedStateRegistryOwner
para establecer y encontrar un propietario que se haya configurado con anterioridad. Este cambio reemplaza la API desavedstate-ktx
defindViewTreeSavedStateRegistryOwner
.
- En el caso de
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 enSavedStateRegistryController
(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
yViewTreeSavedStateRegistryOwner
en Kotlin. En el caso deViewTreeSavedStateRegistryOwner
, 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 enView
deandroidx.savedstate.setViewTreeSavedStateRegistryOwner
yandroidx.savedstate.findViewTreeSavedStateRegistryOwner
para establecer y encontrar un propietario que se haya configurado con anterioridad. Este cambio reemplaza la API desavedstate-ktx
defindViewTreeSavedStateRegistryOwner
. 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 unSavedStateRegistry
a través degetSavedStateProvider()
(I7ea47, b/215406268).
Cambios en la API
- Se reescribieron las clases
SavedStateRegistryOwner
,SavedStateRegistryController
yRecreator
en Kotlin. En el caso deSavedStateRegistryOwner
, este es un cambio incompatible de la fuente para esas clases escritas en Kotlin; ahora debes anular la propiedadsavedStateRegistry
en lugar de implementar la funcióngetSavedStateRegistry()
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 deSavedStateRegistry
medianteperformAttach()
(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 deViewTreeSavedStateRegistryOwner.get(View)
te permite recuperar elSavedStateRegistry
contenedor en una determinada instancia deView
. Debes actualizar a Activity1.2.0
, Fragment1.3.0
yAppCompat1.3.0-alpha01
o versiones posteriores para que la propagación se realice correctamente. - Artefacto
savedstate-ktx
: Se agregó el nuevo artefactosavedstate-ktx
con una extensión de KotlinfindViewTreeSavedStateRegistryOwner()
a fin de trabajar conViewTreeSavedStateRegistryOwner
.
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 objetoSavedStateRegistry
contenedor dado que tiene una instancia deView
. Debes actualizar a Activity1.2.0-alpha05
, Fragment1.3.0-alpha05
y AppCompat1.3.0-alpha01
para completarlo correctamente (aosp/1298679). - Se agregó el artefacto
savedstate-ktx
nuevo con una extensión de KotlinfindViewTreeSavedStateRegistryOwner()
para trabajar conViewTreeSavedStateRegistryOwner
(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étodoAutoRecreated.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
porSavedStateRegistryOwner
.
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.