Сохраненное состояние
Последнее обновление | Стабильный выпуск | Кандидат на выпуск | Бета-версия | Альфа-релиз |
---|---|---|---|---|
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
добавлен в Lifecycle2.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
для изменения сохраняемого состояния. В AndroidSavedState
— это псевдоним типа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 содержит эти коммиты.
Обновления зависимостей
-
SavedState
теперь зависит от Lifecycle2.6.1
. ( c1f621 )
Версия 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
чтобы установить и найти ранее установленного владельца. Это заменяет APIsavedstate-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
чтобы установить и найти ранее установленного владельца. Это заменяет APIsavedstate-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
: новый APIViewTreeSavedStateRegistryOwner.get(View)
позволяет получать содержащийSavedStateRegistry
данный экземплярView
. Чтобы правильно заполнить это, вам необходимо обновиться до Activity1.2.0
, Fragment1.3.0
и AppCompat1.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
. Чтобы правильно заполнить это, вам необходимо обновиться до Activity1.2.0-alpha05
, Fragment1.3.0-alpha05
и AppCompat1.3.0-alpha01
. ( аосп/1298679 ) - В новый артефакт
savedstate-ktx
добавлено расширение KotlinfindViewTreeSavedStateRegistryOwner()
для работы с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
для предоставления сохраненного состояния, как только система его запросит.