Сохраненное состояние

Напишите подключаемые компоненты, которые сохраняют состояние пользовательского интерфейса при завершении процесса и восстанавливают его при перезапуске процесса.
Последнее обновление Стабильный выпуск Кандидат на выпуск Бета-версия Альфа-релиз
11 декабря 2024 г. 1.2.1 - - 1.3.0-альфа06

Объявление зависимостей

Чтобы добавить зависимость от SavedState, необходимо добавить в свой проект репозиторий Google Maven. Для получения дополнительной информации прочтите репозиторий Google Maven .

Добавьте зависимости для нужных вам артефактов в файл build.gradle для вашего приложения или модуля:

классный

dependencies {
    // Java language implementation
    implementation "androidx.savedstate:savedstate:1.2.1"

    // Kotlin
    implementation "androidx.savedstate:savedstate-ktx:1.2.1"
}

Котлин

dependencies {
    // Java language implementation
    implementation("androidx.savedstate:savedstate:1.2.1")

    // Kotlin
    implementation("androidx.savedstate:savedstate-ktx:1.2.1")
}

Дополнительные сведения о зависимостях см. в разделе Добавление зависимостей сборки .

Обратная связь

Ваши отзывы помогают сделать Jetpack лучше. Дайте нам знать, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете добавить свой голос к существующей проблеме, нажав кнопку со звездочкой.

Создать новую задачу

Дополнительную информацию см . в документации по системе отслеживания проблем .

Версия 1.3

Версия 1.3.0-альфа06

11 декабря 2024 г.

androidx.savedstate:savedstate-*:1.3.0-alpha06 выпущен. Версия 1.3.0-alpha06 содержит эти коммиты .

Новые возможности

  • SavedState KMP теперь поддерживает: IBinder , Size , SizeF , Array<Parcelable> , SparseArray<Parcelable> и Serializable (Android). ( I1ba94 , б/334076622 )
  • Добавьте экземпляры KSerializer , которые можно использовать для кодирования/декодирования типов Java и Android, поддерживаемых Bundle, пометив соответствующее поле в вашем классе с помощью @Serializable(with = ParcelableSerializer::class) . ( I8c10f , I28caf , б/376026712 )
  • Экземпляры SavedStateRegistryOwner , полученные с помощью findViewTreeSavedStateRegistryOwner теперь можно разрешить через непересекающиеся родительские элементы представления, такие как ViewOverlay . Дополнительные сведения о родителях непересекающихся представлений см. в примечаниях к выпуску ядра или документации в ViewTree.setViewTreeDisjointParent . ( Iccb33 )

Изменения API

  • Сделайте имена и организацию пакетов более согласованными с помощью SavedStateRegistryOwnerDelegate ( I8c135 , b/376026744 ).

Версия 1.3.0-альфа05

13 ноября 2024 г.

androidx.savedstate:savedstate-*:1.3.0-alpha05 выпущен. Версия 1.3.0-alpha05 содержит эти коммиты .

Поддержка сериализации KotlinX

  • SavedState теперь включает поддержку сериализации KotlinX. Вы можете преобразовать класс, аннотированный @Serializable в SavedState используя методы encodeToSavedState и decodeFromSavedState . Возвращенный SavedState представляет собой обычный Bundle на Android и может использоваться любым API, который принимает Bundle . ( I6f59f , б/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)
    }
    
  • Мы также включили saved , ленивый делегат свойства, чтобы упростить хранение классов @Serializable в SavedStateRegistryOwner (например, ComponentActivity , Fragment и т. д.) и автоматически восстанавливать эти классы после смерти и восстановления процесса. Обратите внимание, что saved делегат ленив и не будет вызывать лямбду init или сохранять что-либо в SavedStateRegistry пока к нему не будет получен доступ. ( I66739 , б / 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")
        }
    }
    
  • Аналогичный делегат saved свойства для SavedStateHandle добавлен в Lifecycle 2.9.0-alpha07 .

Изменения API

  • Добавьте toMap в SavedState , что позволит преобразовать любой SavedState в обычную Map (неполная копия). ( I487b9 , б/334076622 )
  • SavedState KMP теперь поддерживает массивы. ( Ic0552 , б/334076622 )

Версия 1.3.0-альфа04

30 октября 2024 г.

androidx.savedstate:savedstate-*:1.3.0-alpha04 выпущен. Версия 1.3.0-alpha04 содержит эти коммиты .

Изменения API

  • SavedState KMP теперь поддерживает Char. ( I9ac2f , б/334076622 )
  • Добавьте putNull и isNull в SavedState KMP. ( Iea71d , б/334076622 )
  • Добавьте дополнительные параметры фабрики savedState , поддерживающие исходный Map<String, Any> ( I9b37d , b/334076622 ).
  • SavedState KMP теперь поддерживает сравнение contentDeepEquals . ( Ia515c , б/334076622 )
  • SavedState KMP теперь поддерживает Long. ( I4c180 , б/334076622 )

Версия 1.3.0-альфа03

16 октября 2024 г.

androidx.savedstate:savedstate-*:1.3.0-alpha03 выпущен без заметных изменений. Версия 1.3.0-alpha03 содержит эти коммиты .

Версия 1.3.0-альфа02

2 октября 2024 г.

androidx.savedstate:savedstate-*:1.3.0-alpha02 выпущен. Версия 1.3.0-alpha02 содержит эти коммиты .

Котлин Мультиплатформа

  • Модуль SavedState теперь совместим с KMP. Поддерживаемые платформы теперь включают среды рабочего стола Android, iOS, Linux, Mac и JVM. ( I26305 , б/334076622 )

Новые возможности

  • Представьте непрозрачный тип SavedState как абстракцию, чтобы обеспечить согласованный способ сохранения и восстановления состояния приложения в KMP. Он включает в себя SavedStateReader и SavedStateWriter для изменения сохраняемого состояния. В Android SavedState — это псевдоним типа Bundle , обеспечивающий двоичную совместимость и упрощающий миграцию существующих API в общий набор исходного кода. На других платформах SavedState представляет собой экземпляр Map<String, Any> . ( I18575 , б/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

  • SavedStateRegistry и SavedStateRegistryController теперь совместимы с KMP. ( Id7bb8 , б/334076622 )
  • SavedState , SavedStateWriter и SavedStateReader теперь совместимы с KMP. ( I26305 , б/334076622 )

Версия 1.3.0-альфа01

7 августа 2024 г.

Выпущены androidx.savedstate:savedstate:1.3.0-alpha01 и androidx.savedstate:savedstate-ktx:1.3.0-alpha01 . Версия 1.3.0-alpha01 содержит эти коммиты .

Изменения API

  • Расширения savedstate-ktx Kotlin теперь перенесены в базовый модуль savestate. ( I1cc18 , б/274803094 )

Примечание

  • Обновите compileSdk до версии 35 ( 5dc41be )

Версия 1.2.1

Версия 1.2.1

22 марта 2023 г.

androidx.savedstate:savedstate:1.2.1 и androidx.savedstate:savedstate-ktx:1.2.1 выпущены. Версия 1.2.1 содержит эти коммиты.

Обновления зависимостей

Версия 1.2.0

Версия 1.2.0

29 июня 2022 г.

androidx.savedstate:savedstate:1.2.0 и androidx.savedstate:savedstate-ktx:1.2.0 выпущены. Версия 1.2.0 содержит эти коммиты.

Важные изменения с версии 1.1.0

  • SavedStateRegistryController теперь позволяет раннее присоединение SavedStateRegistry с помощью performAttach() .
  • Теперь вы можете получить ранее зарегистрированный SavedStateProvider из SavedStateRegistry с помощью getSavedStateProvider() .
  • Библиотека SavedState переписана на Kotlin.
    • Для SavedStateRegistryOwner это изменение, несовместимое с исходным кодом для классов, написанных на Kotlin — теперь вам необходимо переопределить свойство savedStateRegistry , а не реализовывать предыдущую функцию getSavedStateRegistry() .
    • Для ViewTreeSavedStateRegistryOwner это изменение, несовместимое с исходным кодом для этих классов, написанных на Kotlin — теперь вы должны напрямую импортировать и использовать методы расширения Kotlin в View androidx.savedstate.setViewTreeSavedStateRegistryOwner и androidx.savedstate.findViewTreeSavedStateRegistryOwner чтобы установить и найти ранее установленного владельца. Это заменяет API savedstate-ktx findViewTreeSavedStateRegistryOwner .

Изменения поведения

  • SavedStateRegistry больше не сохраняет пустой пакет, если нет состояния для сохранения.

Версия 1.2.0-rc01

11 мая 2022 г.

androidx.savedstate:savedstate:1.2.0-rc01 и androidx.savedstate:savedstate-ktx:1.2.0-rc01 выпущены. Версия 1.2.0-rc01 содержит эти коммиты.

Изменения в документации

  • Документы SavedStateRegistryOwner были обновлены, чтобы разъяснить обязанности и контракт владельца относительно того, как ему следует реализовывать интерфейс или когда им следует вызывать методы SavedStateRegistryController . ( Iefc95 , б/228887344 )

Версия 1.2.0-бета01

20 апреля 2022 г.

Выпущены androidx.savedstate:savedstate:1.2.0-beta01 и androidx.savedstate:savedstate-ktx:1.2.0-beta01 . Версия 1.2.0-beta01 содержит эти коммиты.

Изменения API

  • Классы SavedStateRegistry и ViewTreeSavedStateRegistryOwner были переписаны на Kotlin. Для ViewTreeSavedStateRegistryOwner это изменение, несовместимое с исходным кодом для этих классов, написанных на Kotlin — теперь вы должны напрямую импортировать и использовать методы расширения Kotlin в View androidx.savedstate.setViewTreeSavedStateRegistryOwner и androidx.savedstate.findViewTreeSavedStateRegistryOwner чтобы установить и найти ранее установленного владельца. Это заменяет API savedstate-ktx findViewTreeSavedStateRegistryOwner . Он совместим на двоичном уровне и остается совместимым с исходным кодом для реализаций, написанных на языке программирования Java. ( б/220191285 )

Версия 1.2.0-альфа02

6 апреля 2022 г.

Выпущены androidx.savedstate:savedstate:1.2.0-alpha02 и androidx.savedstate:savedstate-ktx:1.2.0-alpha02 . Версия 1.2.0-alpha02 содержит эти коммиты.

Новые возможности

  • Теперь вы можете получить ранее зарегистрированный SavedStateProvider из SavedStateRegistry с помощью getSavedStateProvider() . ( I7ea47 , б/215406268 )

Изменения API

  • Классы SavedStateRegistryOwner , SavedStateRegistryController и Recreator были переписаны на Kotlin. Для SavedStateRegistryOwner это изменение, несовместимое с исходным кодом для классов, написанных на Kotlin — теперь вам необходимо переопределить свойство savedStateRegistry , а не реализовывать предыдущую функцию getSavedStateRegistry() . Это двоично-совместимый и исходный код для реализаций, написанных на языке программирования Java. ( б/220191285 )

Версия 1.2.0-альфа01

26 января 2022 г.

Выпущены androidx.savedstate:savedstate:1.2.0-alpha01 и androidx.savedstate:savedstate-ktx:1.2.0-alpha01 . Версия 1.2.0-alpha01 содержит эти коммиты.

Новые возможности

  • SavedStateRegistryController теперь позволяет раннее присоединение SavedStateRegistry с помощью performAttach() . ( Ice4bf )

Изменения поведения

  • SavedStateRegistry больше не сохраняет пустой пакет, если нет состояния для сохранения. ( аосп/1896865 , б/203457956 )

Версия 1.1.0

Версия 1.1.0

10 февраля 2021 г.

androidx.savedstate:savedstate:1.1.0 и androidx.savedstate:savedstate-ktx:1.1.0 выпущены. Версия 1.1.0 содержит эти коммиты.

Основные изменения с версии 1.0.0

  • API ViewTreeSavedStateRegistryOwner : новый API ViewTreeSavedStateRegistryOwner.get(View) позволяет получать содержащий SavedStateRegistry данный экземпляр View . Чтобы правильно заполнить это, вам необходимо обновиться до Activity 1.2.0 , Fragment 1.3.0 и AppCompat 1.3.0-alpha01 или выше.
  • артефакт savedstate-ktx : новый артефакт savedstate-ktx был добавлен вместе с расширением findViewTreeSavedStateRegistryOwner() Kotlin для работы с ViewTreeSavedStateRegistryOwner .

Версия 1.1.0-rc01

16 декабря 2020 г.

androidx.savedstate:savedstate:1.1.0-rc01 и androidx.savedstate:savedstate-ktx:1.1.0-rc01 выпущены без изменений с 1.1.0-beta01 . Версия 1.1.0-rc01 содержит эти коммиты.

Версия 1.1.0-бета01

1 октября 2020 г.

androidx.savedstate:savedstate:1.1.0-beta01 и androidx.savedstate:savedstate-ktx:1.1.0-beta01 выпущены без изменений с 1.1.0-alpha01 . Версия 1.1.0-beta01 содержит эти коммиты.

Версия 1.1.0-альфа01

20 мая 2020 г.

Выпущены androidx.savedstate:savedstate:1.1.0-alpha01 и androidx.savedstate:savedstate-ktx:1.1.0-alpha01 . Версия 1.1.0-alpha01 содержит эти коммиты.

Новые возможности

  • Новый API ViewTreeSavedStateRegistryOwner.get(View) позволяет вам получить содержащий SavedStateRegistry данный экземпляр View . Чтобы правильно заполнить это, вам необходимо обновиться до Activity 1.2.0-alpha05 , Fragment 1.3.0-alpha05 и AppCompat 1.3.0-alpha01 . ( аосп/1298679 )
  • В новый артефакт savedstate-ktx добавлено расширение Kotlin findViewTreeSavedStateRegistryOwner() для работы с ViewTreeSavedStateRegistryOwner . ( аосп/1299434 )

Версия 1.0.0

Версия 1.0.0

5 сентября 2019 г.

androidx.savedstate:savedstate:1.0.0 выпущен. Коммиты, включенные в эту версию, можно найти здесь .

Основные возможности SavedState 1.0.0

androidx.savedstate выпущен в стабильную версию. Это набор API, которые позволяют разработчикам подключать компоненты к процессу восстановления/сохраненияInstanceState. Основной точкой входа в API является SavedStateRegistry , который предоставляет способ получения ранее сохраненных состояний с помощью consumeRestoredStateForKey и регистрации обратного вызова для registerSavedStateProvider для предоставления сохраненного состояния, как только система его запросит.

Версия 1.0.0-rc01

2 июля 2019 г.

androidx.savedstate:savedstate:1.0.0-rc01 выпущен. Коммиты, включенные в эту версию, можно найти здесь .

Исправления ошибок

  • Исправлено неправильное правило proguard ( b/132655499 ).

Версия 1.0.0-бета01

7 мая 2019 г.

androidx.savedstate:savedstate:1.0.0-beta01 выпущен. Коммиты, включенные в эту версию, можно найти здесь .

Версия 1.0.0-альфа02

13 марта 2019 г.

androidx.savedstate:savedstate:1.0.0-alpha02 выпущен. androidx.savedstate:savedstate объединяет артефакты androidx.savedstate:savedstate-bundle и androidx.savedstate:savedstate-common в один артефакт, поскольку было решено упростить инфраструктуру savestate и удалить дженерики из SavedStateRegistry . Таким образом, нет необходимости в отдельных модулях.

Полный список коммитов, включённых в эту версию, можно найти здесь .

Новые возможности

  • Добавлен SavedStateRegistry.runOnNextRecreaction(Class<? extends AutoRecreated> clazz ) . Для данного класса будет создан экземпляр, и метод AutoRecreated.onRecreated будет запущен при перезапуске компонента-владельца.

Изменения API

  • Обобщенные шаблоны удалены из SavedStateRegistry<T>
  • AbstractSavedStateRegistry и BundlableSavedStateRegistry удалены, вместо этого используйте простой SavedStateRegistry
  • BundleSavedStateRegistryOwner переименован в SavedStateRegistryOwner

Версия 1.0.0-альфа01

17 декабря 2018 г.

Это первый выпуск SavedState .

Новые возможности

androidx.savedstate — это новый набор альфа-API, который позволяет разработчикам подключать компоненты к процессу восстановления/сохраненияInstanceState. Основной точкой входа в API является SavedStateRegistry<T> , который предоставляет способ получить ранее сохраненное состояние через consumeRestoredStateForKey и зарегистрировать обратный вызов для registerSavedStateProvider для предоставления сохраненного состояния, как только система его запросит.