Savedstate

Crie componentes conectáveis que salvam o estado da IU quando um processo é encerrado e o restaura quando o processo é reiniciado.
Atualização mais recente Versão estável Versão candidata a lançamento Versão Beta Versão Alfa
11 de dezembro de 2024 1.2.1 - - 1.3.0-alpha06

Declarar dependências

Para adicionar uma dependência ao SavedState, adicione o repositório Maven do Google ao seu projeto. Leia Repositório Maven do Google para ver mais informações.

Adicione as dependências dos artefatos necessários ao arquivo build.gradle do seu app ou 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 mais informações sobre dependências, consulte Adicionar dependências de build.

Feedback

Seu feedback ajuda a melhorar o Jetpack. Avise se você descobrir novos problemas ou tiver ideias para melhorar esta biblioteca. Consulte os problemas conhecidos nesta biblioteca antes de criar um novo. Adicione seu voto a um problema clicando no botão de estrela.

Criar novo problema

Consulte a documentação do Issue Tracker para saber mais.

Versão 1.3

Versão 1.3.0-alpha06

11 de dezembro de 2024

Lançamento de androidx.savedstate:savedstate-*:1.3.0-alpha06. A versão 1.3.0-alpha06 contém estas confirmações.

Novos recursos

  • O KMP SavedState agora oferece suporte a: IBinder, Size, SizeF, Array<Parcelable>, SparseArray<Parcelable> e Serializable (Android). (I1ba94, b/334076622).
  • Adicione instâncias de KSerializer que podem ser usadas para codificar/decodificar tipos Java e Android compatíveis com o Bundle marcando o campo relevante na sua classe com @Serializable(with = ParcelableSerializer::class). (I8c10f, I28caf, b/376026712).
  • As instâncias de SavedStateRegistryOwner extraídas por findViewTreeSavedStateRegistryOwner agora podem ser resolvidas por pais não contíguos de uma visualização, como ViewOverlay. Consulte as notas da versão do núcleo ou a documentação em ViewTree.setViewTreeDisjointParent para mais informações sobre pais de visualização distintos. (Iccb33).

Mudanças na API

  • Os nomes e a organização de pacotes ficaram mais consistentes com SavedStateRegistryOwnerDelegate (I8c135, b/376026744).

Versão 1.3.0-alpha05

13 de novembro de 2024

Lançamento de androidx.savedstate:savedstate-*:1.3.0-alpha05. A versão 1.3.0-alpha05 contém estas confirmações.

Suporte à serialização do KotlinX (link em inglês)

  • O SavedState agora inclui suporte à serialização do KotlinX. É possível converter uma classe anotada com @Serializable em um SavedState usando os métodos encodeToSavedState e decodeFromSavedState. O SavedState retornado é um Bundle normal no Android e pode ser usado por qualquer API que aceite um 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)
    }
    
  • Também incluímos saved, um delegante de propriedade lenta, para facilitar o armazenamento de classes @Serializable em um SavedStateRegistryOwner (por exemplo, ComponentActivity, Fragment etc.) e restaurar automaticamente essas classes durante a morte e a recriação do processo. O delegado saved é preguiçoso e não vai chamar a lambda init nem salvar nada no SavedStateRegistry até que seja acessado. (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")
        }
    }
    
  • Há um delegante de propriedade saved semelhante para SavedStateHandle adicionado em 2.9.0-alpha07 do ciclo de vida.

Mudanças na API

  • toMap foi adicionado a SavedState, permitindo que qualquer SavedState seja convertido em um Map normal (cópia rasa). (I487b9, b/334076622).
  • O KMP SavedState agora oferece suporte a matrizes. (Ic0552, b/334076622).

Versão 1.3.0-alpha04

30 de outubro de 2024

Lançamento de androidx.savedstate:savedstate-*:1.3.0-alpha04. A versão 1.3.0-alpha04 contém estas confirmações.

Mudanças na API

  • O KMP de SavedState agora oferece suporte a Char. (I9ac2f, b/334076622).
  • Adição de putNull e isNull ao KMP de SavedState. (Iea71d, b/334076622).
  • Foram adicionados outros parâmetros de fábrica savedState que oferecem suporte a um Map<String, Any> inicial (I9b37d, b/334076622).
  • O KMP de SavedState agora oferece suporte à comparação contentDeepEquals. (Ia515c, b/334076622).
  • O KMP de estado salvo agora oferece suporte a Long. (I4c180, b/334076622).

Versão 1.3.0-alpha03

16 de outubro de 2024

Lançamento de androidx.savedstate:savedstate-*:1.3.0-alpha03 sem mudanças importantes. A versão 1.3.0-alpha03 contém estas confirmações.

Versão 1.3.0-alpha02

2 de outubro de 2024

Lançamento de androidx.savedstate:savedstate-*:1.3.0-alpha02. A versão 1.3.0-alpha02 contém estas confirmações.

Kotlin Multiplatform

  • O módulo SavedState agora é compatível com o KMP. As plataformas com suporte agora incluem ambientes de computador Android, iOS, Linux, Mac e JVM. (I26305, b/334076622).

Novos recursos

  • Introdução do tipo opaco SavedState como uma abstração para fornecer uma maneira consistente de salvar e restaurar o estado do aplicativo no KMP. Ele inclui uma SavedStateReader e uma SavedStateWriter para modificar o estado a ser salvo. No Android, SavedState é um tipo de alias para Bundle, garantindo a compatibilidade binária e facilitando a migração de APIs para um conjunto de origem comum. Em outras plataformas, SavedState é uma instância 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")
  }

Mudanças na API

  • SavedStateRegistry e SavedStateRegistryController agora são compatíveis com KMP. (Id7bb8, b/334076622).
  • SavedState, SavedStateWriter e SavedStateReader agora são compatíveis com o KMP. (I26305, b/334076622).

Versão 1.3.0-alpha01

7 de agosto de 2024

Lançamento de androidx.savedstate:savedstate:1.3.0-alpha01 e androidx.savedstate:savedstate-ktx:1.3.0-alpha01. A versão 1.3.0-alpha01 contém estas confirmações.

Mudanças na API

  • As extensões savedstate-ktx do Kotlin foram movidas para o módulo base do savedstate. (I1cc18, b/274803094).

Observação

  • Atualização de compileSdk para 35 (5dc41be).

Versão 1.2.1

Versão 1.2.1

22 de março de 2023

Lançamento de androidx.savedstate:savedstate:1.2.1 e androidx.savedstate:savedstate-ktx:1.2.1. A versão 1.2.1 contém estas confirmações.

Atualizações de dependência

Versão 1.2.0

Versão 1.2.0

29 de junho de 2022

Lançamento de androidx.savedstate:savedstate:1.2.0 e androidx.savedstate:savedstate-ktx:1.2.0. A versão 1.2.0 contém estas confirmações.

Mudanças importantes desde a versão 1.1.0

  • A classe SavedStateRegistryController agora permite a anexação antecipada do SavedStateRegistry pelo método performAttach().
  • Agora você pode extrair um SavedStateProvider registrado anteriormente de um SavedStateRegistry usando getSavedStateProvider().
  • A biblioteca SavedState foi reescrita em Kotlin.
    • Para SavedStateRegistryOwner, essa é uma mudança incompatível com a fonte das classes escritas em Kotlin. Agora é necessário mudar a propriedade savedStateRegistry em vez de implementar a função getSavedStateRegistry() anterior.
    • Para ViewTreeSavedStateRegistryOwner, essa é uma mudança incompatível com a fonte das classes escritas em Kotlin. Agora é necessário importar e usar diretamente os métodos de extensão Kotlin na View de androidx.savedstate.setViewTreeSavedStateRegistryOwner e androidx.savedstate.findViewTreeSavedStateRegistryOwner para definir e encontrar um proprietário configurado anteriormente. Isso substitui a API savedstate-ktx de findViewTreeSavedStateRegistryOwner.

Mudanças de comportamento

  • A classe SavedStateRegistry não salva mais um pacote vazio se não houver um estado a ser salvo.

Versão 1.2.0-rc01

11 de maio de 2022

Lançamento de androidx.savedstate:savedstate:1.2.0-rc01 e androidx.savedstate:savedstate-ktx:1.2.0-rc01. A versão 1.2.0-rc01 contém estas confirmações.

Mudanças na documentação

  • Os Kdocs de SavedStateRegistryOwner foram atualizados para esclarecer as responsabilidades e o contrato que o proprietário tem sobre como implementar a interface ou quando chamar os métodos na classe SavedStateRegistryController (Iefc95, b/228887344).

Versão 1.2.0-beta01

20 de abril de 2022

Lançamento de androidx.savedstate:savedstate:1.2.0-beta01 e androidx.savedstate:savedstate-ktx:1.2.0-beta01. A versão 1.2.0-beta01 contém estas confirmações.

Mudanças na API

  • As classes SavedStateRegistry e ViewTreeSavedStateRegistryOwner foram reescritas em Kotlin. Para ViewTreeSavedStateRegistryOwner, essa é uma mudança incompatível com a fonte das classes escritas em Kotlin. Agora é necessário importar e usar diretamente os métodos de extensão Kotlin na View de androidx.savedstate.setViewTreeSavedStateRegistryOwner e androidx.savedstate.findViewTreeSavedStateRegistryOwner para definir e encontrar um proprietário configurado anteriormente. Isso substitui a API savedstate-ktx de findViewTreeSavedStateRegistryOwner. Ela é compatível com binários e mantém a compatibilidade com fontes nas implementações escritas na linguagem de programação Java (b/220191285).

Versão 1.2.0-alpha02

6 de abril de 2022

Lançamento de androidx.savedstate:savedstate:1.2.0-alpha02 e androidx.savedstate:savedstate-ktx:1.2.0-alpha02. A versão 1.2.0-alpha02 contém estas confirmações.

Novos recursos

  • Agora você pode extrair um SavedStateProvider registrado anteriormente de um SavedStateRegistry usando getSavedStateProvider() (I7ea47, b/215406268).

Mudanças na API

  • As classes SavedStateRegistryOwner, SavedStateRegistryController e Recreator foram reescritas em Kotlin. Para SavedStateRegistryOwner, essa é uma mudança incompatível com a fonte das classes escritas em Kotlin. Agora é necessário mudar a propriedade savedStateRegistry em vez de implementar a função getSavedStateRegistry() anterior. Ela é compatível com binários e fontes e serve para implementações escritas na linguagem de programação Java (b/220191285).

Versão 1.2.0-alpha01

26 de janeiro de 2022

Lançamento de androidx.savedstate:savedstate:1.2.0-alpha01 e androidx.savedstate:savedstate-ktx:1.2.0-alpha01. A versão 1.2.0-alpha01 contém estas confirmações.

Novos recursos

  • A classe SavedStateRegistryController agora permite a anexação antecipada da SavedStateRegistry via performAttach() (Ice4bf).

Mudanças de comportamento

  • A classe SavedStateRegistry não salva mais um pacote vazio se não houver um estado a ser salvo (aosp/1896865, b/203457956).

Versão 1.1.0

Versão 1.1.0

10 de fevereiro de 2021

Lançamento de androidx.savedstate:savedstate:1.1.0 e androidx.savedstate:savedstate-ktx:1.1.0. A versão 1.1.0 contém estas confirmações.

Principais mudanças desde a versão 1.0.0

  • API ViewTreeSavedStateRegistryOwner: uma nova API ViewTreeSavedStateRegistryOwner.get(View) permite que você recupere o SavedStateRegistry contido de uma instância View. Você precisa fazer upgrade para a Activity 1.2.0, Fragment 1.3.0 e AppCompat 1.3.0-alpha01 ou mais recente para preencher corretamente.
  • Artefato savedstate-ktx: o novo artefato savedstate-ktx foi adicionado com uma extensão Kotlin findViewTreeSavedStateRegistryOwner() para trabalhar com ViewTreeSavedStateRegistryOwner.

Versão 1.1.0-rc01

16 de dezembro de 2020

Lançamento de androidx.savedstate:savedstate:1.1.0-rc01 e androidx.savedstate:savedstate-ktx:1.1.0-rc01, sem mudanças desde a 1.1.0-beta01. A versão 1.1.0-rc01 contém estas confirmações.

Versão 1.1.0-beta01

1º de outubro de 2020

Lançamento de androidx.savedstate:savedstate:1.1.0-beta01 e androidx.savedstate:savedstate-ktx:1.1.0-beta01, sem mudanças desde a 1.1.0-alpha01. A versão 1.1.0-beta01 contém estas confirmações.

Versão 1.1.0-alpha01

20 de maio de 2020

Lançamento de androidx.savedstate:savedstate:1.1.0-alpha01 e androidx.savedstate:savedstate-ktx:1.1.0-alpha01. A versão 1.1.0-alpha01 contém estas confirmações.

Novos recursos

  • Uma nova API ViewTreeSavedStateRegistryOwner.get(View) permite que você extraia o SavedStateRegistry contido de uma instância View. É necessário fazer upgrade para Atividade 1.2.0-alpha05, Fragmento 1.3.0-alpha05 e AppCompat 1.3.0-alpha01 para preencher corretamente. (aosp/1298679).
  • O novo artefato savedstate-ktx foi adicionado com uma extensão Kotlin findViewTreeSavedStateRegistryOwner() para trabalhar com ViewTreeSavedStateRegistryOwner (aosp/1299434, link em inglês).

Versão 1.0.0

Versão 1.0.0

5 de setembro de 2019

Lançamento de androidx.savedstate:savedstate:1.0.0. As confirmações incluídas nesta versão podem ser conferidas neste link.

Principais recursos do SavedState 1.0.0

androidx.savedstate se tornou uma versão estável. Este é um conjunto de APIs que permite aos desenvolvedores conectar componentes de plug-in no processo restore / saveInstanceState. O ponto de entrada principal da API é SavedStateRegistry, que traz uma maneira de recuperar estados salvos anteriormente usando consumeRestoredStateForKey e registrar um callback para registerSavedStateProvider para disponibilizar um estado salvo quando o sistema o solicitar.

Versão 1.0.0-rc01

2 de julho de 2019

Lançamento de androidx.savedstate:savedstate:1.0.0-rc01. As confirmações incluídas nessa versão podem ser encontradas aqui (link em inglês).

Correções de bugs

  • Correção de uma regra incorreta do Proguard (b/132655499)

Versão 1.0.0-beta01

7 de maio de 2019

Lançamento de androidx.savedstate:savedstate:1.0.0-beta01. As confirmações incluídas nessa versão podem ser encontradas aqui (link em inglês).

Versão 1.0.0-alpha02

13 de março de 2019

Lançamento de androidx.savedstate:savedstate:1.0.0-alpha02. androidx.savedstate:savedstate combina androidx.savedstate:savedstate-bundle e androidx.savedstate:savedstate-common em um único artefato, porque foi decidido simplificar a infraestrutura do savedstate e remover os genéricos do SavedStateRegistry. Portanto, não é necessário ter módulos diferentes.

A lista completa das confirmações incluídas nesta versão pode ser conferida neste link.

Novos recursos

  • Adição de SavedStateRegistry.runOnNextRecreaction(Class<? extends AutoRecreated> clazz ). A classe determinada será instanciada e o método AutoRecreated.onRecreated será executado quando o componente proprietário for reiniciado.

Mudanças na API

  • Genéricos removidos de SavedStateRegistry<T>.
  • AbstractSavedStateRegistry e BundlableSavedStateRegistry foram removidos. Use SavedStateRegistry.
  • BundleSavedStateRegistryOwner foi renomeado como SavedStateRegistryOwner.

Versão 1.0.0-alpha01

17 de dezembro de 2018

Essa é a primeira versão do SavedState.

Novos recursos

androidx.savedstate é um novo conjunto de APIs alfa que permite que os desenvolvedores façam o plug-in de componentes para o processo restore / saveInstanceState. O ponto de entrada principal da API é SavedStateRegistry<T>, que traz uma maneira de recuperar o savedstate anterior via consumeRestoredStateForKey e registrar um callback para registerSavedStateProvider para disponibilizar um savedstate quando o sistema o solicitar.