Жизненный цикл
В этой таблице перечислены все артефакты в группе androidx.lifecycle
.
Артефакт | Стабильный релиз | Кандидат на релиз | Бета-версия | Альфа-релиз |
---|---|---|---|---|
жизненный цикл-* | 2.9.3 | - | - | 2.10.0-альфа03 |
жизненный цикл-представление-модель-навигация3 | - | - | - | 2.10.0-альфа03 |
Объявление зависимостей
Чтобы добавить зависимость от Lifecycle, необходимо добавить репозиторий Google Maven в свой проект. Подробнее см. в репозитории Google Maven .
Добавьте зависимости для необходимых артефактов в файл build.gradle
вашего приложения или модуля:
Котлин
Круто
dependencies { def lifecycle_version = "2.9.3" def arch_version = "2.2.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" // ViewModel utilities for Compose implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version" // LiveData implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version" // Lifecycles only (without ViewModel or LiveData) implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version" // Lifecycle utilities for Compose implementation "androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version" // Saved state module for ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version" // ViewModel integration with Navigation3 implementation "androidx.lifecycle:lifecycle-viewmodel-navigation3:2.10.0-alpha03" // Annotation processor kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // alternately - if using Java8, use the following instead of lifecycle-compiler implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" // optional - helpers for implementing LifecycleOwner in a Service implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version" // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" // optional - ReactiveStreams support for LiveData implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version" // optional - Test helpers for LiveData testImplementation "androidx.arch.core:core-testing:$arch_version" // optional - Test helpers for Lifecycle runtime testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version" }
Котлин
dependencies { val lifecycle_version = "2.9.3" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version") // ViewModel utilities for Compose implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version") // Lifecycle utilities for Compose implementation("androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // ViewModel integration with Navigation3 implementation("androidx.lifecycle:lifecycle-viewmodel-navigation3:2.10.0-alpha03") // Annotation processor kapt("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation ("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
Ява
Круто
dependencies { def lifecycle_version = "2.9.3" def arch_version = "2.2.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version" // LiveData implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version" // Lifecycles only (without ViewModel or LiveData) implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version" // Saved state module for ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version" // Annotation processor annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // alternately - if using Java8, use the following instead of lifecycle-compiler implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" // optional - helpers for implementing LifecycleOwner in a Service implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version" // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" // optional - ReactiveStreams support for LiveData implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version" // optional - Test helpers for LiveData testImplementation "androidx.arch.core:core-testing:$arch_version" // optional - Test helpers for Lifecycle runtime testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version" }
Котлин
dependencies { val lifecycle_version = "2.9.3" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // Annotation processor annotationProcessor("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
Котлин
Круто
dependencies { def lifecycle_version = "2.9.3" def arch_version = "2.2.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" // ViewModel utilities for Compose implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version" // LiveData implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version" // Lifecycles only (without ViewModel or LiveData) implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version" // Lifecycle utilities for Compose implementation "androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version" // Saved state module for ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version" // ViewModel integration with Navigation3 implementation "androidx.lifecycle:lifecycle-viewmodel-navigation3:2.10.0-alpha03" // Annotation processor kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // alternately - if using Java8, use the following instead of lifecycle-compiler implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" // optional - helpers for implementing LifecycleOwner in a Service implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version" // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" // optional - ReactiveStreams support for LiveData implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version" // optional - Test helpers for LiveData testImplementation "androidx.arch.core:core-testing:$arch_version" // optional - Test helpers for Lifecycle runtime testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version" }
Котлин
dependencies { val lifecycle_version = "2.9.3" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version") // ViewModel utilities for Compose implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version") // Lifecycle utilities for Compose implementation("androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // ViewModel integration with Navigation3 implementation("androidx.lifecycle:lifecycle-viewmodel-navigation3:2.10.0-alpha03") // Annotation processor kapt("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation ("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
Ява
Круто
dependencies { def lifecycle_version = "2.9.3" def arch_version = "2.2.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version" // LiveData implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version" // Lifecycles only (without ViewModel or LiveData) implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version" // Saved state module for ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version" // Annotation processor annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // alternately - if using Java8, use the following instead of lifecycle-compiler implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" // optional - helpers for implementing LifecycleOwner in a Service implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version" // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" // optional - ReactiveStreams support for LiveData implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version" // optional - Test helpers for LiveData testImplementation "androidx.arch.core:core-testing:$arch_version" // optional - Test helpers for Lifecycle runtime testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version" }
Котлин
dependencies { val lifecycle_version = "2.9.3" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // Annotation processor annotationProcessor("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
Дополнительную информацию о зависимостях см. в разделе Добавление зависимостей сборки .
Обратная связь
Ваши отзывы помогают улучшить Jetpack. Сообщите нам, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с уже существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете проголосовать за существующую проблему, нажав на кнопку со звёздочкой.
Более подробную информацию см. в документации по системе отслеживания проблем .
Lifecycle ViewModel Navigation3 Версия 1.0.0
Версия 1.0.0-альфа04
30 июля 2025 г.
Выпущены androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha04
и androidx.lifecycle:lifecycle-viewmodel-navigation3-android:1.0.0-alpha04
. Версия 1.0.0-alpha04 содержит эти коммиты .
Изменения зависимости
- Lifecycle Viewmodel Navigation3 теперь зависит от Navigation3 Alpha06 .
Версия 1.0.0-альфа03
2 июля 2025 г.
Выпущены androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha03
и androidx.lifecycle:lifecycle-viewmodel-navigation3-android:1.0.0-alpha03
. Версия 1.0.0-alpha03 содержит эти коммиты .
Изменения зависимости
- Lifecycle ViewModel Navigation 3 теперь зависит от Navigation3 Alpha05 .
Версия 1.0.0-альфа02
18 июня 2025 г.
Выпущены androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha02
и androidx.lifecycle:lifecycle-viewmodel-navigation3-android:1.0.0-alpha02
. Версия 1.0.0-alpha02 содержит эти коммиты .
Обновления зависимостей
- Lifecycle ViewModel Navigation3
1.0.0-alpha02
зависит от изменений в Navigation31.0.0-alpha04
. ( Icd0fd , b/420991203 )
Версия 1.0.0-альфа01
23 мая 2025 г.
Выпущена androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha01
. Версия 1.0.0-alpha01 содержит следующие коммиты .
Новые функции
- Lifecycle ViewModel Navigation3 — это новая библиотека, созданная вместе с Navigation3 для интеграции с
ViewModels
. Артефактandroidx.lifecycle:lifecycle-viewmodel-navigation3
предоставляетViewModelStoreNavEntryDecorator
, который предоставляет уникальный объектViewModelStoreOwner
для содержимого каждого элементаNavEntry
. Он также предоставляет методrememberViewModelStoreNavEntryDecorator()
, гарантирующий корректную обработку декоратора при изменении конфигурации.
val viewModelDecorator = rememberViewModelStoreNavEntryDecorator()
NavDisplay(
…,
entryDecorators =
listOf(
rememberSceneSetupNavEntryDecorator(),
rememberSavedStateNavEntryDecorator(),
viewModelDecorator
)
)
Версия 2.10
Версия 2.10.0-альфа03
27 августа 2025 г.
Выпущен androidx.lifecycle:lifecycle-*:2.10.0-alpha03
. Версия 2.10.0-alpha03 содержит следующие коммиты .
Изменения API
- Обновите Compose до версии 1.9.0. ( I2b9de )
Версия 2.10.0-альфа02
13 августа 2025 г.
Выпущен androidx.lifecycle:lifecycle-*:2.10.0-alpha02
. Версия 2.10.0-alpha02 содержит следующие коммиты .
Новые функции
Композируемый объект
LifecycleOwner
теперь может создавать автономный корневой жизненный цикл . Если (явно) задатьparent = null
, новый жизненный цикл будет работать независимо от любого хоста (например,Activity
,Fragment
илиNavBackStackEntry
). Он запускается сразу после попадания композируемого объекта в композицию и автоматически уничтожается при выходе из неё. ( I8dfbe , b/433659048 )@Composable fun IndependentComponent() { // Create a standalone lifecycle, not tied to the parent Activity/Fragment. LifecycleOwner(parent = null) { val rootLifecycle = LocalLifecycleOwner.current.lifecycle } }
Изменения API
- В компонуемом объекте
LifecycleOwner
параметрparentLifecycleOwner
был переименован вparent
. ( I080bc )
Исправления ошибок
- Компонуемый объект
LifecycleOwner
теперь корректно переводит свой жизненный цикл вDESTROYED
при уничтожении. Это предотвращает потенциальные утечки внешнего кода, содержащего ссылку на жизненный цикл. ( I9e5b7 , b/433659048 ) - Перемещение minSdk по умолчанию из API 21 в API 23 ( Ibdfca , b/380448311 , b/435705964 , b/435705223 )
Внешний вклад
- Удалить ненужные внутренние поля из
LifecycleOwner
. Спасибо Джейку Уортону за вклад. ( Ideddb )
Версия 2.10.0-альфа01
30 июля 2025 г.
Выпущен androidx.lifecycle:lifecycle-*:2.10.0-alpha01
. Версия 2.10.0-alpha01 содержит следующие коммиты .
Новые функции
Добавьте компонуемый объект
LifecycleOwner
, чтобы можно было создавать жизненные циклы с ограниченной областью действия непосредственно в пользовательском интерфейсе. Это полезно для компонентов, которым необходимо независимо управлять своими жизненными циклами. Пример интеграции этого нового компонуемого объекта в Navigation3 см. в aosp/3708610 . ( 76cbf7 )@Composable fun MyComposable() { LifecycleOwner( maxLifecycle = RESUMED, parentLifecycleOwner = LocalLifecycleOwner.current, ) { val childLifecycleOwner = LocalLifecycleOwner.current } }
Изменения API
- Добавить функцию фабрики построителей для
CreationExtras
, обеспечивая более удобный и идиоматический API Kotlin. ( Iab2bd ) - Добавить встроенную поддержку типов, допускающих значение NULL, в
SavedStateHandle.saved
, упрощая сохранение и восстановление свойств, допускающих значение NULL. ( I54d69 , b/421325690 ) - Пометить конструкторы
SavedStateHandle
как@VisibleForTesting
. ( Iff0e0 , b/408002794 )
Версия 2.9
Версия 2.9.3
27 августа 2025 г.
Выпущен androidx.lifecycle:lifecycle-*:2.9.3
. Версия 2.9.3 содержит следующие коммиты .
Новые функции
- Добавлены новые цели Kotlin Multiplatform (KMP) в артефакты Lifecycle
*-compose
. Lifecycle теперь поддерживает следующие платформы: JVM (Android и десктоп), Native (Linux, iOS, watchOS, macOS, MinGW) и Web (JavaScript, WasmJS). ( I0a0e4 )
Исправления ошибок
- Обновление
androidx.annotation
до версии 1.9.1 ( Ic9e4f , b/397701294 )
Версия 2.9.2
16 июля 2025 г.
Выпущен androidx.lifecycle:lifecycle-*:2.9.2
. Версия 2.9.2 содержит следующие коммиты .
Исправления ошибок
- Добавлены новые цели Kotlin Multiplatform (KMP) в артефакты Lifecycle. Lifecycle теперь поддерживает следующие платформы: JVM (Android и десктоп), Native (Linux, iOS, watchOS, macOS, MinGW) и Web (JavaScript, WasmJS). Обратите внимание, что в артефакты
*-compose
новые цели KMP не добавлены, так как это зависит от стабильной версии Compose 1.9 ( I01cb8 ).
Обновления зависимостей
- Жизненный цикл теперь зависит от аннотации
1.9.1
для обеспечения поддержки новых целей KMP ( Ic9e4f , b/397701294 ).
Версия 2.9.1
4 июня 2025 г.
Выпущен androidx.lifecycle:lifecycle-*:2.9.1
. Версия 2.9.1 содержит следующие коммиты .
Исправления ошибок
- Исправлена ошибка, из-за
SavedStateHandle.remove(key)
не очищал состоянияSavedStateHandle.getMutableStateFlow(key)
. ( d5f939 , b/418746333 )
Версия 2.9.0
7 мая 2025 г.
Выпущен androidx.lifecycle:lifecycle-*:2.9.0
. Версия 2.9.0 содержит следующие коммиты .
Важные изменения по сравнению с версией 2.8.0
- Доступен новый артефакт KMP
androidx.lifecycle:lifecycle-viewmodel-testing
, который предоставляет классViewModelScenario
для тестированияViewModels
в изоляции с поддержкойonCleared
иSavedStateHandle
, а также тестирование завершения и восстановления процесса с помощьюrecreate()
. - Добавьте
getMutableStateFlow
кSavedStateHandle
, чтобы возвращатьMutableStateFlow
. Эта новая функция является ключевой и не может использоваться сgetLiveData
. При попытке использовать обе функции для доступа к одному и тому же состоянию будет выдано исключение. -
CreationExtras
теперь включает перегрузки операторов, подобных картам, для идиоматической манипуляции содержимым в Kotlin. Это позволяет использоватьin
,+=
и+
сCreationExtras
.
Поддержка сериализации KotlinX
Благодаря поддержке сериализации KotlinX, добавленной в SavedState
1.3.0
, мы добавили ленивый делегат свойствsaved
, который упрощает сохранение классов@Serializable
вSavedStateHandle
и позволяет автоматически восстанавливать эти классы при завершении и восстановлении процесса. Обратите внимание, чтоsaved
делегат является ленивым и не будет вызывать лямбда-функциюinit
и сохранять данные вSavedStateHandle
до тех пор, пока к нему не будет выполнено обращение.@Serializable data class Person(val firstName: String, val lastName: String) class MyViewModel(handle: SavedStateHandle) : ViewModel() { var person by handle.saved { Person("John", "Doe") } fun onPersonChanged(person: Person) { this.person = person } }
Kotlin Мультиплатформенный
- Модуль
lifecycle-testing
теперь совместим с KMP, включая такие API, какTestLifecycleOwner
. - Модуль
lifecycle-viewmodel-savedstate
теперь совместим с KMP, включая такие API, какSavedStateHandle
. -
androidx.compose.ui.platform.LocalLifecycleOwner
теперь доступен в общем исходном наборе. -
NewInstanceFactory
теперь доступен на платформах JVM Desktop и Android.
Изменения поведения
- Состояние
Lifecycle.DESTROYED
является конечным, и любая попытка перевестиLifecycle
из него в любое другое состояние теперь приведет к исключениюIllegalStateException
. -
SavedStateHandle
больше не включаетSavedStateProvider.saveState()
если возвращаемыйBundle
пуст.
Версия 2.9.0-rc01
23 апреля 2025 г.
Выпущен androidx.lifecycle:lifecycle-*:2.9.0-rc01
. Версия 2.9.0-rc01 содержит следующие коммиты .
Предупреждение о совместимости Lint API
- JetBrains изменила класс
KaCallableMemberCall
на интерфейс , что нарушает бинарную совместимость. Это может привести к сбоям, если версия AGP вашего проекта отличается от версии, используемой для компиляции lint-проверок. Это обновление было внесено в aosp/3577172 , но отсутствовало в примечаниях к выпуску — мы уточняем это здесь. Рекомендуемое исправление: обновите AGP до последней стабильной версии. Если полное обновление невозможно, используйтеandroid.experimental.lint.version
для согласования lint-проверок с вашей версией AGP — подробности см. в разделе «Изменения поведения среды выполнения Compose» .
Версия 2.9.0-beta01
9 апреля 2025 г.
Выпущен androidx.lifecycle:lifecycle-*:2.9.0-beta01
. Версия 2.9.0-beta01 содержит следующие коммиты .
Изменения API
-
Lifecycle ViewModel Compose
теперь использует ту же конфигурацию Kotlin Multiplatform, что и Compose Runtime 1.7.1 и более поздние версии: артефакты-desktop
удалены, а артефакты-jvmStubs
и-linuxx64Stubs
добавлены. Ни один из этих целевых объектов не предназначен для использования, они являются заглушками, помогающими работе Jetbrains Compose. ( I5cb14 , b/406592090 )
Обновления зависимостей
- Эта библиотека теперь ориентирована на уровень языка Kotlin 2.0 и требует KGP 2.0.0 или более поздней версии. ( Idb6b5 )
-
Lifecycle ViewModel Compose
теперь зависит от Compose 1.7.8. ( I5cb14 , b/406592090 )
Версия 2.9.0-альфа13
26 марта 2025 г.
androidx.lifecycle:lifecycle-*:2.9.0-alpha13
выпущен без заметных публичных изменений. Версия 2.9.0-alpha13 содержит следующие коммиты .
Версия 2.9.0-альфа12
12 марта 2025 г.
Выпущен androidx.lifecycle:lifecycle-*:2.9.0-alpha12
. Версия 2.9.0-alpha12 содержит следующие коммиты .
Изменения API
- Добавьте аннотацию
@MainThread
вViewModelProvider.get
на всех поддерживаемых платформах KMP. ( I7e8dd , b/397736115 ) - Переименуйте
SavedState*Delegates
вSavedState*Delegate
. ( I8589b , b/399629301 )
Версия 2.9.0-альфа11
26 февраля 2025 г.
Выпущен androidx.lifecycle:lifecycle-*:2.9.0-alpha11
. Версия 2.9.0-alpha11 содержит следующие коммиты .
Изменения API
- Добавить параметр
SavedStateConfig
к делегатамsaved()
( I39b3a )
Версия 2.9.0-альфа10
12 февраля 2025 г.
Выпущен androidx.lifecycle:lifecycle-*:2.9.0-alpha10
. Версия 2.9.0-alpha10 содержит следующие коммиты .
Изменения API
- Переместить
MutableStateSerializer
вsavedstate-compose
изlifecycle-viewmodel-compose
. ( I4f690 , b/378895074 )
Внешний вклад
- Добавляет новую проблему Lint для вызова
Lifecycle::currentState
в композиции, предлагая вместо этого использоватьcurrentStateAsalue().value
, чтобы гарантировать, что изменения в состоянии жизненного цикла корректно вызывают перекомпозицию. Спасибо, Стивен Шен! ( Iad484 )
Версия 2.9.0-альфа09
29 января 2025 г.
Выпущена androidx.lifecycle:lifecycle-*:2.9.0-alpha09
. Версия 2.9.0-alpha09 содержит следующие коммиты .
Новые функции
- Добавить
MutableStateSerializer
для сериализацииandroidx.compose.runtime.MutableState
. ( Idfc48 , b/378895074 )
Изменения API
- Заменить перегруженные функции делегата
SavedStateHandle.saved()
параметрами по умолчанию ( Icd1c1 ) -
AbstractSavedStateViewModelFactory
устарел, так как он создаётSavedStateHandle
для каждойViewModel
, что приводит к ненужным накладным расходам. Для более эффективного созданияViewModel
используйтеViewModelProvider.Factory
сCreationExtras.createSavedStateHandle
. ( Ia920b , b/388590327 ).
Версия 2.9.0-альфа08
11 декабря 2024 г.
Выпущена androidx.lifecycle:lifecycle-*:2.9.0-alpha08
. Версия 2.9.0-alpha08 содержит следующие коммиты .
Новые функции
- Добавьте
ViewModelScenario.recreate
для имитации завершения системного процесса, воссоздающего тестируемуюViewModel
и все связанные с ней компоненты. ( Id6a69 , b/381063087 ) - Экземпляры
LifecycleOwner
иViewModelStoreOwner
, полученные через соответствующие APIfindViewTree
, теперь могут быть разрешены через непересекающиеся родительские элементы представления, такие какViewOverlay
. Подробнее о непересекающихся родительских элементах представления см. в примечаниях к выпуску ядра или в документации поViewTree.setViewTreeDisjointParent
. ( I800f4 ).
Изменения API
- Сделать наименования и организацию пакетов более согласованными с
SavedStateRegistryOwnerDelegate
( I8c135 , b/376026744 )
Исправления ошибок
- Эта библиотека теперь использует аннотации JSpecify, определяющие значение null , которые являются типовыми. Разработчикам Kotlin следует использовать следующий аргумент компилятора для обеспечения корректного использования:
-Xjspecify-annotations=strict
(это значение по умолчанию, начиная с версии 2.1.0 компилятора Kotlin). ( Ie4340 , b/326456246 ) - Последовательность очистки Document
ViewModel.onCleared
. ( I586c7 , b/363984116 )
Версия 2.9.0-альфа07
13 ноября 2024 г.
Выпущен androidx.lifecycle:lifecycle-*:2.9.0-alpha07
. Версия 2.9.0-alpha07 содержит следующие коммиты .
Совместимость с Kotlin на разных платформах
- Lifecycle
ViewModel SavedState
теперь совместим с KMP. Это позволяет использоватьSavedStateHandle
в общем коде. ( Ib6394 , b/334076622 )
Поддержка сериализации KotlinX
Благодаря поддержке сериализации KotlinX, добавленной в SavedState
1.3.0-alpha05
, мы добавили ленивый делегат свойствsaved
, который упрощает сохранение классов@Serializable
вSavedStateHandle
и позволяет автоматически восстанавливать эти классы при завершении и восстановлении процесса. Обратите внимание, чтоsaved
делегат является ленивым и не будет вызывать лямбда-функциюinit
и сохранять что-либо вSavedStateHandle
до тех пор, пока к нему не будет получен доступ. ( I47a88 , b/376026744 )@Serializable data class Person(val firstName: String, val lastName: String) class MyViewModel(handle: SavedStateHandle) : ViewModel() { var person by handle.saved { Person("John", "Doe") } fun onPersonChanged(person: Person) { this.person = person } }
Изменения API
- Добавьте
getMutableStateFlow
кSavedStateHandle
, чтобы возвращатьMutableStateFlow
. Эта новая функция является ключевой и не может использоваться сgetLiveData
. При попытке использовать обе функции для доступа к одному и тому же состоянию будет выдано исключение. ( I04a4f , b/375408415 )
Версия 2.9.0-альфа06
30 октября 2024 г.
Выпущена androidx.lifecycle:lifecycle-*:2.9.0-alpha06
. Версия 2.9.0-alpha06 содержит следующие коммиты .
Изменения поведения
- Состояние
Lifecycle.DESTROYED
является конечным, и любая попытка перевестиLifecycle
из него в любое другое состояние теперь приведет к исключениюIllegalStateException
. ( I116c4 , b/370577987 ) -
SavedStateHandle
больше не включаетSavedStateProvider.saveState()
, если возвращаемыйBundle
пуст. ( I910b5 , b/370577987 )
Исправления ошибок
-
Lifecycle.eventFlow
теперь корректно завершается, когдаLifecycle
DESTROYED
( I293b2 , b/374043130 )
Версия 2.9.0-альфа05
16 октября 2024 г.
androidx.lifecycle:lifecycle-*:2.9.0-alpha05
выпущен без существенных изменений. Версия 2.9.0-alpha05 содержит следующие коммиты .
Версия 2.9.0-альфа04
2 октября 2024 г.
Выпущен androidx.lifecycle:lifecycle-*:2.9.0-alpha04
. Версия 2.9.0-alpha04 содержит следующие коммиты .
Kotlin Мультиплатформенный
- Модуль
lifecycle-viewmodel-savedstate
теперь настроен на совместимость с KMP в рамках подготовки к тому, что такие API, какSavedStateHandle
, станут доступны в общем исходном наборе в будущем выпуске. ( I503ed , I48764 , b/334076622 )
Версия 2.9.0-альфа03
18 сентября 2024 г.
Выпущена androidx.lifecycle:lifecycle-*:2.9.0-alpha03
. Версия 2.9.0-alpha03 содержит следующие коммиты .
Исправления ошибок
- Начиная с Lifecycle
2.8.6
: ошибкаNullSafeMutableLiveData
Lint улучшила поддержку смарт-приведений, избегая ложных срабатываний. ( 85fed6 , b/181042665 )
Обновления зависимостей
- Начиная с Lifecycle
2.8.6
: Lifecycle Runtime Compose теперь зависит от Compose Runtime1.7.1
- Lifecycle Runtime теперь зависит от ProfileInstaller
1.4.0
Версия 2.9.0-альфа02
4 сентября 2024 г.
Выпущен androidx.lifecycle:lifecycle-*:2.9.0-alpha02
. Версия 2.9.0-alpha02 содержит следующие коммиты .
Исправления ошибок
- Начиная с Lifecycle
2.8.5
: обновите правилаandroidx.lifecycle.ReportFragment
ProGuard, чтобы разрешить обфускацию. ( ff898e1 )
Внешний вклад
- Перенести
androidx.compose.ui.platform.LocalLifecycleOwner
в общий исходный набор (KMP). Благодарим Ивана Маткова из JetBrains за вклад. ( 8cd5d03 ) - Начиная с версии Lifecycle
2.8.5
: делегат расширения SavedStateHandle.saveable теперь поддерживает значения, допускающие NULL. Благодарим Романа Калукевича за вклад. ( 0d78ea6 )
Версия 2.9.0-альфа01
7 августа 2024 г.
Выпущен androidx.lifecycle:lifecycle-*:2.9.0-alpha01
. Версия 2.9.0-alpha01 содержит следующие коммиты .
Kotlin Мультиплатформенный
-
lifecycle-testing
теперь совместимо с KMP. ( Iea41e ) - Добавить поддержку многоплатформенной цели
linuxArm64
kotlin ( I139d3 , b/338268719 )
Новые функции
- Доступен новый артефакт KMP
androidx.lifecycle:lifecycle-viewmodel-testing
, который предоставляет классViewModelScenario
для изолированного тестирования ViewModels с поддержкойonCleared
(все платформы) иSavedStateHandle
(только Android). ( 337f68d , c9b3409 , 9799a95c , b/264602919 ) - Создание
ViewModel
с помощьюViewModelProvider
теперь потокобезопасно; аннотации@MainThread
были удалены. ( Ifd978 , b/237006831 )
Изменения API
- Добавьте фабричную функцию
CreationExtras.Key()
для упрощения создания анонимных объектовCreationExtras.Key
. ( I970ee ) -
CreationExtras
теперь включает перегрузки операторов, подобных картам, для идиоматической манипуляции содержимым в Kotlin. Это позволяет использоватьin
,+=
и+
сCreationExtras
. ( Ib4353 ) -
CreationExtras
теперь реализует методыequals
,hashCode
иtoString
. ( Ib4353 ) -
NewInstanceFactory
теперь доступен на платформах JVM Desktop и Android. ( d3d0892 ) - Встроенное свойство расширения для безопасного предоставления базового приложения в версии языка Kotlin 2.0 ( I39df2 )
Исправления ошибок
- Удалено ручное описание доступа к новым API платформы, поскольку это происходит автоматически посредством моделирования API при использовании R8 с AGP 7.3 или более поздней версии (например, R8 версии 3.3) и для всех сборок с использованием AGP 8.1 или более поздней версии (например, D8 версии 8.1). Клиентам, не использующим AGP, рекомендуется обновиться до D8 версии 8.1 или более поздней. Подробнее см. в этой статье . ( If6b4c , b/345472586 )
Версия 2.8
Версия 2.8.7
30 октября 2024 г.
Выпущен androidx.lifecycle:lifecycle-*:2.8.7
. Версия 2.8.7 содержит следующие коммиты .
Изменения API
-
androidx.compose.ui.platform.LocalLifecycleOwner
теперь доступен в общем исходном наборе (KMP). ( 6a3f5b3 ) -
lifecycle-runtime-compose
: артефактыdesktop
были удалены, а артефакты-jvmStubs
и-linuxx64Stubs
были добавлены. Ни один из этих целевых объектов не предназначен для использования, они являются заглушками, помогающими работе Jetbrains Compose. ( 6a3f5b3 )
Версия 2.8.6
18 сентября 2024 г.
Выпущен androidx.lifecycle:lifecycle-*:2.8.6
. Версия 2.8.6 содержит следующие коммиты .
Исправления ошибок
- Ошибка
NullSafeMutableLiveData
Lint улучшила поддержку смарт-приведений, избегая ложных срабатываний. ( 85fed6 , b/181042665 )
Обновления зависимостей
- Lifecycle Runtime Compose теперь зависит от Compose Runtime
1.7.1
Версия 2.8.5
4 сентября 2024 г.
Выпущен androidx.lifecycle:lifecycle-*:2.8.5
. Версия 2.8.5 содержит следующие коммиты .
Исправления ошибок
- Обновите правила
androidx.lifecycle.ReportFragment
ProGuard, чтобы разрешить обфускацию. ( ff898e1 )
Внешний вклад
- Делегат расширения
SavedStateHandle.saveable
теперь поддерживает значения, допускающие NULL. Спасибо Роману Калукевичу за вклад. ( 0d78ea6 )
Версия 2.8.4
24 июля 2024 г.
Выпущен androidx.lifecycle:lifecycle-*:2.8.4
. Версия 2.8.4 содержит следующие коммиты .
Исправления ошибок
-
LiveData.asFlow()
теперь корректно обрабатывает случаи, когда возвращаемый поток немедленно завершается после получения значения, уже установленного вLiveData
(например, при использованииtake(1)
). ( I9c566 ) - Завершение
Lifecycle*Effect
теперь идемпотентно (т. е. еслиonStopOrDispose
был вызван из-за остановки жизненного цикла, он не будет вызван повторно при завершении, если только жизненный цикл снова не вернется в состояниеSTARTED
). ( I5f607 , b/352364595 )
Версия 2.8.3
1 июля 2024 г.
Выпущен androidx.lifecycle:lifecycle-*:2.8.3
. Версия 2.8.3 содержит следующие коммиты .
Исправления ошибок
- Исправлена проблема обратной совместимости Lifecycle 2.8 с Compose 1.6.0 и более ранними версиями при использовании сжатия кода. ( aosp/3133056 , b/346808608 )
Версия 2.8.2
12 июня 2024 г.
Выпущен androidx.lifecycle:lifecycle-*:2.8.2
. Версия 2.8.2 содержит следующие коммиты .
Исправления ошибок
- Исправлена ошибка
CompositionLocal LocalLifecycleOwner not present
ошибок при использовании Lifecycle 2.8.X с Compose 1.6.X или более ранней версии. Теперь вы можете использовать Lifecycle 2.8.2 с любой версией Compose без необходимости каких-либо обходных путей. ( aosp/3105647 , b/336842920 ) -
ViewModelProvider
больше не будет давать сбой при смешивании предыдущих версий зависимостейcompileOnly
Lifecycle с версиями 2.8+, что устраняет проблемы с такими библиотеками, как LeakCanary. ( I80383 , b/341792251 )
Версия 2.8.1
29 мая 2024 г.
Выпущен androidx.lifecycle:lifecycle-*:2.8.1
. Версия 2.8.1 содержит следующие коммиты .
Исправления ошибок
-
lifecycle-viewmodel-compose
теперь имеет только общую зависимость отcompose-runtime
, что устраняет его общую зависимость отcompose-ui
. Артефакт Android сохраняет свойcompose-ui
для совместимости. ( aosp/3079334 , b/339562627 ) -
saveable
интеграцияViewModel
с использованием делегатов свойств теперь использует имя класса как часть автоматически сгенерированного ключа, избегая конфликтов, если несколько классов используют один и тот жеSavedStateHandle
. ( aosp/3063463 )
Версия 2.8.0
14 мая 2024 г.
Выпущен androidx.lifecycle:lifecycle-*:2.8.0
. Версия 2.8.0 содержит следующие коммиты .
Важные изменения по сравнению с версией 2.7.0
-
LocalLifecycleOwner
был перемещен из Compose UI вlifecycle-runtime-compose
чтобы его вспомогательные API на основе Compose можно было использовать за пределами Compose UI. - Артефакт
lifecycle-runtime-compose
теперь содержит APIdropUnlessResumed
иdropUnlessStarted
, которые позволяют отменять события щелчков или другие события, происходящие даже после того, какLifecycleOwner
опустился ниже заданного значенияLifecycle.State
. Например, это можно использовать с Navigation Compose, чтобы избежать обработки событий щелчков после начала перехода на другой экран:onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
ViewModel.viewModelScope
теперь является переопределяемым параметром конструктора, что позволяет вам внедрять собственный диспетчер иSupervisorJob()
или переопределять значения по умолчанию, используяbackgroundScope
, доступный вrunTest
. ( I2817c , b/264598574 )class MyViewModel( // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob() ) : ViewModel(viewModelScope) { // Use viewModelScope as before, without any code changes } // Allows overriding the viewModelScope in a test fun Test() = runTest { val viewModel = MyViewModel(backgroundScope) }
ViewModel
был переписан на Kotlin и теперь используетAutoClosable
вместоCloseable
. Теперь он поддерживает добавление объектовAutoCloseable
сkey
, позволяющим получать их черезgetCloseable()
.Вызов
LifecycleStartEffect
иLifecycleResumeEffect
без ключа теперь является ошибкой в соответствии с тем же соглашением, что и APIDisposableEffect
, которое отражают эти API.LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
устарел и заменен наLiveData.toPublisher(lifecycleOwner)
.Расширения kotlin
lifecycle-livedata-core-ktx
теперь перенесены в модульlifecycle-livedata-core
.NullSafeMutableLiveData
был переработан, чтобы избежать множества ложных срабатываний.
Совместимость жизненного цикла Kotlin с несколькими платформами
Основные API жизненного цикла в Lifecycle
, LifecycleOwner
, LifecycleObserver
, Lifecycle.State
, Lifecycle.Event
и LifecycleRegistry
теперь поставляются в артефактах, совместимых с Kotlin Multiplatform.
Затронутые артефакты:
-
lifecycle-common
переводит большинство API вcommon
и поддерживает jvm и iOS в дополнение к Android. -
lifecycle-runtime
переводит большинство API вcommon
и поддерживает jvm и iOS в дополнение к Android. -
lifecycle-runtime-ktx
теперь пуст, все API перемещены вlifecycle-runtime
. -
lifecycle-runtime-compose
перемещает все API вcommon
и поставляет артефакт Android, соответствующий многоплатформенной поддержкеandroidx.compose
.
Совместимость ViewModel Kotlin с различными платформами
Артефакт lifecycle-viewmodel
и такие API, как ViewModel
, ViewModelStore
, ViewModelStoreOwner
и ViewModelProvider
, теперь поставляются в артефактах, совместимых с Kotlin Multiplatform.
Чтобы учесть это изменение, методы, подобные методам ViewModelProvider
, которые принимали java.lang.Class<T>
теперь имеют эквивалентный метод, который принимает kotlin.reflect.KClass<T>
.
Бинарная совместимость на Android сохранена, но есть несколько заметных изменений при сравнении поверхности API Android с поверхностью общего API:
- Создание экземпляра
ViewModelProvider
теперь выполняется с помощью методовViewModelProvider.create()
, а не путем прямого вызова его конструктора. -
ViewModelProvider.NewInstanceFactory
иViewModelProvider.AndroidViewModelFactory
доступны только на Android.- Рекомендуется, чтобы пользовательские фабрики расширяли
ViewModelProvider.Factory
и использовали методcreate
, который принимаетCreationExtras
, или использовалиviewModelFactory
Kotlin DSL.
- Рекомендуется, чтобы пользовательские фабрики расширяли
- Использование
ViewModelProvider
без пользовательской фабрики на платформах, отличных от JVM, приведёт к исключениюUnsupportedOperationException
. На платформах JVM совместимость сохраняется благодаря использованию конструктора ViewModel без аргументов, если пользовательская фабрика не предоставлена. -
viewModelScope
будет возвращаться кEmptyCoroutineContext
на платформах, гдеDispatchers.Main
недоступен (например, Linux).
Затронутые артефакты:
-
lifecycle-viewmodel
переводит большинство API вcommon
и поддерживает jvm и iOS в дополнение к Android. -
lifecycle-viewmodel-ktx
теперь пуст, все API перемещены вlifecycle-viewmodel
. -
lifecycle-viewmodel-compose
перемещает все API вcommon
и поставляет артефакт Android, соответствующий многоплатформенной поддержкеandroidx.compose
.
Изменения поведения
-
InitializerViewModelFactory
(включая функцию конструктораviewModelFactory
) теперь будет выдавать исключениеIllegalArgumentException
, еслиinitializer
с тем жеclazz: KClass<VM : ViewModel>
уже был добавлен. ( Ic3a36 )
Известные проблемы
-
lifecycle-*:2.8.0
требует версию Compose не ниже 1.7.0-alpha05 ( b/336842920 ).
Версия 2.8.0-rc01
1 мая 2024 г.
Выпущена androidx.lifecycle:lifecycle-*:2.8.0-rc01
. Версия 2.8.0-rc01 содержит следующие коммиты .
Исправления ошибок
- Исправлена ошибка, из-за которой базовый профиль для
lifecycle-common
не был должным образом упакован. Теперь они упакованы в AAR-файлlifecycle-runtime
. ( aosp/3038274 , b/322382422 ) - Исправлено непреднамеренное изменение порядка очистки экземпляров
AutoCloseable
, прикрепленных к ViewModel. Восстановлен предыдущий порядок:addCloseable(String, AutoCloseable)
, затемaddClosable(AutoCloseable)
, затемonCleared()
. ( aosp/3041632 ) - Улучшить поведение создания по умолчанию для
viewModelScope
для собственных сред и сред JVM Desktop. ( aosp/3039221 )
Внешний вклад
- Спасибо Виктору Кроппу за улучшение проверки основного потока на JVM Desktop. ( aosp/3037116 )
Версия 2.8.0-beta01
17 апреля 2024 г.
Выпущен androidx.lifecycle:lifecycle-*:2.8.0-beta01
. Версия 2.8.0-beta01 содержит следующие коммиты .
Новые функции
- Артефакт
lifecycle-runtime-compose
теперь совместим с Kotlin Multiplatform, его код перемещен вcommon
и поставляется с артефактом Android, что соответствует поддержке нескольких платформ дляandroidx.compose
. ( If7a71 , I4f4a0 , b/331769623 )
Версия 2.8.0-альфа04
3 апреля 2024 г.
Выпущен androidx.lifecycle:lifecycle-*:2.8.0-alpha04
. Версия 2.8.0-alpha04 содержит следующие коммиты .
Новые функции
- Артефакт
lifecycle-viewmodel-compose
теперь совместим с Kotlin Multiplatform, его код перенесён вcommon
и поставляется как артефакт Android, что соответствует мультиплатформенной поддержкеandroidx.compose
. Чтобы учесть это изменение, метод ComposableviewModel
теперь принимаетKClass
в дополнение кjava.lang.Class
. ( b/330323282 )
Исправления ошибок
-
NullSafeMutableLiveData
был рефакторингирован, чтобы избежать множества ложных срабатываний. ( I2d8c1 , Iafb18 , I03463 , I7ecef )
Обновление зависимости
- Артефакт
lifecycle-viewmodel-compose
теперь зависит от Compose 1.6.0. - Жизненный цикл теперь зависит от Profile Installer 1.3.1 .
Версия 2.8.0-альфа03
20 марта 2024 г.
Выпущен androidx.lifecycle:lifecycle-*:2.8.0-alpha03
. Версия 2.8.0-alpha03 содержит следующие коммиты .
Новые функции
ViewModel.viewModelScope
теперь является переопределяемым параметром конструктора, что позволяет вам внедрять собственный диспетчер иSupervisorJob()
или переопределять значения по умолчанию, используяbackgroundScope
, доступный вrunTest
. ( I2817c , b/264598574 )class MyViewModel( // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob() ) : ViewModel(viewModelScope) { // Use viewModelScope as before, without any code changes } // Allows overriding the viewModelScope in a test fun Test() = runTest { val viewModel = MyViewModel(backgroundScope) }
Совместимость с Kotlin на разных платформах
Артефакт lifecycle-viewmodel
и такие API, как ViewModel
, ViewModelStore
, ViewModelStoreOwner
и ViewModelProvider
, теперь поставляются в артефактах, совместимых с Kotlin Multiplatform. ( b/214568825 )
Чтобы учесть это изменение, методы, подобные методам ViewModelProvider
, которые принимали java.lang.Class<T>
теперь имеют эквивалентный метод, который принимает kotlin.reflect.KClass<T>
.
Бинарная совместимость на Android сохранена, но есть несколько заметных изменений при сравнении поверхности API Android с поверхностью общего API:
- Создание экземпляра
ViewModelProvider
теперь выполняется с помощью методовViewModelProvider.create()
, а не путем прямого вызова его конструктора. -
ViewModelProvider.NewInstanceFactory
иViewModelProvider.AndroidViewModelFactory
доступны только на Android.- Рекомендуется, чтобы пользовательские фабрики расширяли
ViewModelProvider.Factory
и использовали методcreate
, который принимаетCreationExtras
, или использовалиviewModelFactory
Kotlin DSL.
- Рекомендуется, чтобы пользовательские фабрики расширяли
- Использование
ViewModelProvider
без пользовательской фабрики на платформах, отличных от JVM, приведёт к исключениюUnsupportedOperationException
. На платформах JVM совместимость сохраняется благодаря использованию конструктора ViewModel без аргументов, если пользовательская фабрика не предоставлена. -
viewModelScope
будет возвращаться кEmptyCoroutineContext
на платформах, гдеDispatchers.Main
недоступен (например, Linux).
Изменения поведения
-
InitializerViewModelFactory
(включая функцию конструктораviewModelFactory
) теперь будет выдавать исключениеIllegalArgumentException
, еслиinitializer
с тем жеclazz: KClass<VM : ViewModel>
уже был добавлен. ( Ic3a36 )
Исправления ошибок
-
ViewModel.getCloseable
теперь обрабатывает дублирующиеся ключи: если сkey
уже связан ресурсAutoCloseable
, старый ресурс будет заменен и немедленно закрыт. ( Ibeb67 ) - Доступ к
viewModelScope
объектаViewModel
теперь потокобезопасен. ( If4766 , b/322407038 )
Внешний вклад
-
LocalLifecycleOwner
перенесён из Compose UI в lifecycle-runtime-compose, чтобы его вспомогательные API на основе Compose можно было использовать вне Compose UI. Спасибо Джейку Уортону за вклад. ( I6c41b , b/328263448 )
Версия 2.8.0-альфа02
21 февраля 2024 г.
Выпущена androidx.lifecycle:lifecycle-*:2.8.0-alpha02
. Версия 2.8.0-alpha02 содержит следующие коммиты.
Новые функции
- Добавлены API
dropUnlessResumed
иdropUnlessStarted
, позволяющие отменять события щелчков или другие события, происходящие даже после того, какLifecycleOwner
опустился ниже заданного значенияLifecycle.State
. Например, это можно использовать с Navigation Compose, чтобы избежать обработки событий щелчков после перехода на другой экран:onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
( Icba83 , b/317230685 )
Конвертации Kotlin
-
ViewModel
теперь написан на Kotlin ( I16f26 , b/214568825 ) - Расширения
lifecycle-viewmodel-ktx
для Kotlin теперь перенесены в базовый модуль жизненного цикла. ( Id787b , b/274800183 ) - Расширения
lifecycle-runtime-ktx
для Kotlin теперь перенесены в базовый модуль жизненного цикла. ( Ic3686 , b/274800183 ) - Расширения
lifecycle-livedata-core-ktx
для Kotlin теперь перенесены в базовый модуль жизненного цикла. ( I54a3d , b/274800183 )
Совместимость с Kotlin на разных платформах
- Основные API жизненного цикла в
Lifecycle
,LifecycleOwner
,LifecycleObserver
,Lifecycle.State
,Lifecycle.Event
иLifecycleRegistry
теперь поставляются в артефактах, совместимых с Kotlin Multiplatform. ( b/317249252 )
Изменения API
- Вызов
LifecycleStartEffect
иLifecycleResumeEffect
без ключа теперь является ошибкой, следуя тому же соглашению, что и APIDisposableEffect
, которое отражают эти API. ( Ib0e0c , b/323518079 ) -
ViewModel
теперь используетAutoCloseable
вместоCloseable
. Это изменение обратно совместимо. ( I27f8e , b/214568825 ) -
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
устарел и теперь используется методLiveData.toPublisher(lifecycleOwner)
. ( Iabe29 , b/262623005 )
Внешний вклад
- Благодарим Ивана Маткова из Jetbrains за помощь в переносе Lifecycle на Kotlin Multiplatform. ( aosp/2926690 , I0c5ac , If445d )
Версия 2.8.0-альфа01
24 января 2024 г.
Выпущена androidx.lifecycle:lifecycle-*:2.8.0-alpha01
. Версия 2.8.0-alpha01 содержит следующие коммиты.
Новые функции
-
ViewModel
теперь поддерживает добавление объектовCloseable
сkey
, который позволяет извлекать их черезgetCloseable()
. ( I3cf63 )
Версия 2.7
Версия 2.7.0
10 января 2024 г.
Выпущен androidx.lifecycle:lifecycle-*:2.7.0
. Версия 2.7.0 содержит следующие коммиты.
Важные изменения по сравнению с версией 2.6.0
-
TestLifecycleOwner
теперь включает функцию приостановкиsetCurrentState()
, которая гарантирует, что изменение состояния и все обратные вызовыLifecycleObserver
будут завершены перед возвратом. Примечательно, что в отличие от прямой установки свойстваcurrentState
, здесь не используетсяrunBlocking
, что делает её безопасной для использования в сопрограмме, например, в сопрограммеrunTest
. - Расширения
LiveData
дляmap
иswitchMap
теперь отражают поведениеdistinctUntilChanged
: еслиvalue
LiveData
установлено, функцияmap
/switchMap
будет немедленно вызвана для заполнения возвращаемогоvalue
LiveData
. Это гарантирует, что начальное значение будет установлено как часть первой композиции (при использовании сobserveAsState()
), но не меняет поведение наблюдения: обновлённые значения из исходногоLiveData
будут применяться только после начала наблюденияLiveData
. - В этом выпуске исправлена проблема, из-за которой
SavedStateHandle
не мог должным образом восстанавливать пользовательские классыParcelable
после смерти и воссоздания процесса. Из-за того, что информация о типе теряется платформой Android, массивы пользовательских Parcelables требуют дополнительной работы (создание типизированного массива нужного типа вручную), и документация поget
,getLiveData
иgetStateFlow
теперь специально устраняет это ограничение. - Правила хранения proguard, связанные с
LifecycleObserver
, были удалены. Это означает, что защищенный код, который хочет использовать API-интерфейсы посредством отражения (например, используя давно устаревшую аннотацию@OnLifecycleEvent
), должен будет предоставить свои собственные правила хранения для своего конкретного варианта использования.
Наблюдение за событиями жизненного цикла
- В качестве альтернативы использованию
LifecycleEventObserver
теперь вы можете наблюдать заFlow
Lifecycle.Event
с помощью метода расширенияLifecycle.asFlow()
. - Пользователи Jetpack Compose теперь могут использовать
LifecycleEventEffect
для запуска побочных эффектов Compose на основеLifecycle.Event
.
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
viewModel.refreshData()
}
// …
}
- Пользователи Jetpack Compose могут использовать
LifecycleStartEffect
иLifecycleResumeEffect
для обработки пар событий — начало, остановка и возобновление, пауза соответственно. Этот API отражает API, найденный вDisposableEffect
и подходит для случаев, когда изменение, вносимое при повышении состояния, необходимо отменить при понижении.
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
LifecycleStartEffect(viewModel) {
val timeTracking = viewModel.startTrackingTimeOnScreen()
onStopOrDispose {
timeTracking.stopTrackingTimeOnScreen()
}
}
// …
}
Дополнительные сведения см. в разделе Запуск кода при событиях жизненного цикла .
Наблюдаемость за состоянием жизненного цикла
- Текущий
Lifecycle.State
теперь можно наблюдать через свойствоLifecycle.currentStateFlow
, которое возвращаетStateFlow
, гдеvalue
является текущийLifecycle.State
. - Пользователи Jetpack Compose могут использовать расширение
Lifecycle.currentStateAsState()
, чтобы напрямую предоставлятьLifecycle.State
как ComposeState
. Это эквивалент (и более короткая альтернатива)lifecycle.currentStateFlow.collectAsState()
.
Дополнительные сведения см. в разделе Сбор состояния жизненного цикла с помощью потоков .
Версия 2.7.0-rc02
13 декабря 2023 г.
Выпущен androidx.lifecycle:lifecycle-*:2.7.0-rc02
. Версия 2.7.0-rc02 содержит эти коммиты.
Исправления ошибок
- Исправлена проблема, из-за которой
SavedStateHandle
не восстанавливал должным образом пользовательские классыParcelable
после смерти и воссоздания процесса. Из-за того, что информация о типе теряется платформой Android, массивы пользовательских Parcelables требуют дополнительной работы (создание типизированного массива нужного типа вручную), и документация поget
,getLiveData
иgetStateFlow
теперь специально устраняет это ограничение. ( I0b55a )
Версия 2.7.0-rc01
15 ноября 2023 г.
Выпущен androidx.lifecycle:lifecycle-*:2.7.0-rc01
. Версия 2.7.0-rc01 содержит эти коммиты.
Исправления ошибок
-
LifecycleStartEffect
иLifecycleResumeEffect
теперь правильно удаляют и воссоздают блок эффекта, еслиLifecycleOwner
изменен. ( Ia25c6 )
Версия 2.7.0-бета01
1 ноября 2023 г.
androidx.lifecycle:lifecycle-*:2.7.0-beta01
выпущен без изменений. Версия 2.7.0-beta01 содержит эти коммиты.
- Обновление бета-версии, никаких серьезных изменений в этой версии нет.
Версия 2.7.0-альфа03
18 октября 2023 г.
Выпущен androidx.lifecycle:lifecycle-*:2.7.0-alpha03
. Версия 2.7.0-alpha03 содержит эти коммиты.
Новые функции
-
lifecycle-runtime-testing
теперь содержит новую проверку Lint, позволяющую избежать установкиLifecycle.State
TestLifecycleOwner
с использованием поляcurrentState
внутри сопрограммы. Проверка Lint теперь предлагает приостановитьsetCurrentState
, что позволяет установитьLifecycle.State
без блокировки. ( Icf728 , б/297880630 )
Исправления ошибок
- Исправлена проблема с
LiveData.switchMap
, из-за которой возврат одного и того же экземпляраLiveData
как при первоначальном вызове, так и при последующем вызове препятствовал добавлению экземпляраLiveData
в качестве источника. ( Ibedcba7 )
Версия 2.7.0-альфа02
6 сентября 2023 г.
Выпущен androidx.lifecycle:lifecycle-*:2.7.0-alpha02
. Версия 2.7.0-alpha02 содержит эти коммиты.
Новые функции
-
TestLifecycleOwner
теперь включает функцию приостановкиsetCurrentState()
, чтобы дать пользователям возможность использоватьTestLifecycleOwner
из сопрограммы, например, предоставленнойrunTest
. ( I329de , б / 259344129 )
Изменения API
- Все файлы из модулей
lifecycle-livedata-ktx
были перемещены в основной модульlifecycle-livedata
. ( I10c6f , б / 274800183 )
Изменения поведения
- Расширения
LiveData.map()
иLiveData.switchMap()
теперь устанавливаютvalue
возвращаемогоLiveData
, если для предыдущегоLiveData
было установлено значение, гарантируя, что использование результирующего LiveData в Jetpack Compose имеет правильное состояние в исходной композиции. ( I91d2b , б/269479952 ) - Функция
addCloseable()
ViewModel
теперь немедленно закрываетCloseable
, еслиViewModel
уже получила вызовonCleared()
. ( I4712e , б / 280294730 )
Исправления ошибок
- Из жизненного цикла
2.6.2
: исправлена проблема, из-за которойSavedStateHandle
не мог быть правильно восстановлен после смерти процесса, если состояние было восстановлено,save()
вызывался без фактического сохранения состояния в родительскомSavedStateRegistry
, а затем состояние восстанавливалось снова. Это исправляет взаимодействие междуrememberSaveable
иNavHost
из Navigation Compose. ( аосп/2729289 )
Версия 2.7.0-альфа01
26 июля 2023 г.
Выпущен androidx.lifecycle:lifecycle-*:2.7.0-alpha01
. Версия 2.7.0-alpha01 содержит эти коммиты.
Изменения API
-
Lifecycle.State
теперь доступен для наблюдения Compose черезLifecycle.currentStateFlow
, который возвращаетStateFlow
, гдеvalue
является текущийLifecycle.State
. ( Ib212d , б/209684871 ) -
Lifecycle.Event
теперь можно наблюдать какFlow
с помощьюLifecycle.asFlow().
( If2c0f , b/176311030 ) - Был добавлен API
LifecycleResumeEffect
для запуска ComposeSideEffect
на основе обратных вызовов событийLifecycle.Event.ON_RESUME
иLifecycle.Event.ON_PAUSE
. ( I60386 , б / 235529345 ) - Был добавлен API
LifecycleStartEffect
для запуска ComposeSideEffect
на основе обратных вызовов событийLifecycle.Event.ON_START
иLifecycle.Event.ON_STOP
. ( I5a8d1 , б/235529345 ) - Был добавлен API
LifecycleEventEffect
для запуска ComposeSideEffect
на основеLifecycle.Event
. ( Ic9794 , б/235529345 ) - Было добавлено расширение
Lifecycle.collectAsState()
, позволяющее напрямую предоставлятьLifecycle.State
как ComposeState
. Это эквивалент (и более короткая альтернатива)lifecycle.currentStateFlow.collectAsState()
. ( I11015 , б / 235529345 )
Исправления ошибок
- Расширение
LiveData.distinctUntilChanged()
теперь устанавливаетvalue
возвращаемогоLiveData
, если для предыдущегоLiveData
было установлено значение. Это не меняет поведение наблюдения — обновленные значения из исходногоLiveData
по-прежнему будут применяться только после того, как вы начнете наблюдать заLiveData
возвращаемым изdistinctUntilChanged()
. ( Ib482f ) - Правила хранения proguard, связанные с
LifecycleObserver
, были удалены. Это означает, что защищенный код, желающий использовать API посредством отражения, должен будет предоставить свои собственные правила хранения для конкретного варианта использования. ( Ia12fd )
Версия 2.6
Версия 2.6.2
6 сентября 2023 г.
Выпущен androidx.lifecycle:lifecycle-*:2.6.2
. Версия 2.6.2 содержит эти коммиты.
Исправления ошибок
- Исправлена проблема, из-за которой
SavedStateHandle
не восстанавливался правильно после смерти процесса, если состояние было восстановлено,save()
вызывался без фактического сохранения состояния в родительскомSavedStateRegistry
, а затем состояние восстанавливалось снова. Это исправляет взаимодействие междуrememberSaveable
иNavHost
из Navigation Compose. ( аосп/2729289 )
Версия 2.6.1
22 марта 2023 г.
Выпущен androidx.lifecycle:lifecycle-*:2.6.1
. Версия 2.6.1 содержит эти коммиты.
Обновления зависимостей
-
lifecycle-viewmodel-savedstate
теперь зависит от SavedState1.2.1
. ( cd7251 ) - Жизненный цикл теперь зависит от ProfileInstaller
1.3.0
. ( f9d30b )
Версия 2.6.0
8 марта 2023 г.
Выпущен androidx.lifecycle:lifecycle-*:2.6.0
. Версия 2.6.0 содержит эти коммиты.
Важные изменения с версии 2.5.0
-
LiveData
теперь включает новое свойствоisInitialized
, которое указывает, было ли когда-либо установлено явное значение дляLiveData
, что позволяет вам различатьliveData.value
, возвращающийnull
поскольку значение никогда не было установлено, или явноеnull
значение. -
MediatorLiveData
теперь включает конструктор для установки начального значения. - Добавлено новое расширение для
StateFlow
иFlow
методаcollectAsStateWithLifecycle()
, которое собирает данные из потоков и представляет их последнее значение как Compose State с учетом жизненного цикла. - Методы
Lifecycle.launchWhenX
иLifecycle.whenX
устарели, так как использование диспетчера приостановки в некоторых случаях может привести к потере ресурсов. Рекомендуется использоватьLifecycle.repeatOnLifecycle
. Для получения дополнительной информации о однократной приостановке работы см. объяснение того, почему это по своей сути небезопасно. - Преобразование Kotlin . Большое количество классов жизненного цикла было преобразовано в Kotlin. Все преобразованные классы по-прежнему сохраняют двоичную совместимость с предыдущими версиями. Следующие классы имеют несовместимые с исходным кодом изменения для классов, написанных на Kotlin:
ViewTreeLifecycleOwner
,LiveDataReactiveStreams
,HasDefaultViewModelProviderFactory
,ViewTreeViewModelStoreOwner
,Transformations
,ViewModelStoreOwner
,LifecycleOwner
В таблице ниже представлены преобразования исходного кода для новой версии жизненного цикла.
Жизненный цикл 2.5 | Жизненный цикл 2.5 (KTX) | Жизненный цикл 2.6 |
---|---|---|
Transformations.switchMap(liveData) {...} | liveData.switchMap {...} | liveData.switchMap {...} |
Transformations.map(liveData) {...} | liveData.map {...} | liveData.map {...} |
Transformations.distinctUntilChanged(liveData) {...} | liveData.distinctUntilChanged{...} | liveData.distinctUntilChanged{...} |
LiveDataReactiveStreams.fromPublisher(publisher) | publisher.toLiveData() | publisher.toLiveData() |
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) | liveData.toPublisher(lifecycleOwner) | liveData.toPublisher(lifecycleOwner) |
override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory | override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory | override val defaultViewModelProviderFactory = factory |
override fun getDefaultViewModelCreationExtras(): CreationExtras = extras | override fun getDefaultViewModelCreationExtras(): CreationExtras = extras | override val defaultViewModelProviderCreationExtras = extras |
ViewTreeLifecycleOwner.set(view, owner) | ViewTreeLifecycleOwner.set(view, owner) | view.setViewTreeLifecycleOwner(owner) |
ViewTreeLifecycleOwner.get(view) | view.findViewTreeLifecycleOwner() | view.findViewTreeLifecycleOwner() |
override fun getViewModelStore(): ViewModelStore = store | override fun getViewModelStore(): ViewModelStore = store | override val viewModelStore: ViewModelStore = store |
override fun getLifecycle(): Lifecycle = registry | override fun getLifecycle(): Lifecycle = registry | override val lifecycle: Lifecycle get() = registry |
- Обнуляемость метода
onChanged
Observer
, созданного в Kotlin, теперь соответствует обнуляемости универсального типа. Если вы хотите, чтобыObserver.onChanged()
принимал тип, допускающий значение NULL, вы должны создать экземплярObserver
с типом, допускающим значение NULL. - Эти классы также были преобразованы в Kotlin, но остались совместимыми с исходным кодом:
DefaultLifecycleObserver
,LifecycleEventObserver
,Lifecycle
,LifecycleRegistry
,LifecycleObserver
,ViewModelStore
,AndroidViewModel
,AbstractSavedStateViewModelFactory
,LifecycleService
,ServiceLifecycleDispatcher
иProcessLifecycleOwner
.
Версия 2.6.0-rc01
22 февраля 2023 г.
Выпущен androidx.lifecycle:lifecycle-*:2.6.0-rc01
. Версия 2.6.0-rc01 содержит эти коммиты.
Исправления ошибок
- Расширение
LiveData.distinctUntilChanged()
теперь устанавливаетvalue
возвращаемогоLiveData
, если для предыдущегоLiveData
было установлено значение. Это не меняет поведение наблюдения — обновленные значения из исходногоLiveData
по-прежнему будут применяться только после того, как вы начнете наблюдать заLiveData
возвращаемым изdistinctUntilChanged()
. ( Ib482f )
Версия 2.6.0-бета01
8 февраля 2023 г.
Выпущен androidx.lifecycle:lifecycle-*:2.6.0-beta01
. Версия 2.6.0-beta01 содержит эти коммиты.
Котлин-преобразования
-
LifecycleOwner
теперь написан на Kotlin. Это изменение, несовместимое с исходным кодом, для классов, написанных на Kotlin — теперь они должны переопределять свойствоlifecycle
, а не реализовывать предыдущую функциюgetLifecycle()
. ( I75b4b , б/240298691 ) -
ViewModelStoreOwner
теперь находится в Kotlin. Это изменение, несовместимое с исходным кодом, для классов, написанных на Kotlin — теперь они должны переопределить свойствоviewModelStore
, а не реализовывать предыдущую функциюgetViewModelStore()
. ( I86409 , б / 240298691 ) - Расширение Kotlin для
LifecycleOwner
, предоставляющее полеlifecycleScope
, было перенесено вlifecycle-common
изlifecycle-runtime-ktx
. ( I41d78 , б/240298691 ) - Расширение Kotlin для
Lifecycle
, предоставляющее полеcoroutineScope
, было перенесено вlifecycle-common
артефакт изlifecycle-runtime-ktx
. ( Ябб91 , б/240298691 )
Версия 2.6.0-альфа05
25 января 2023 г.
Выпущен androidx.lifecycle:lifecycle-*:2.6.0-alpha05
. Версия 2.6.0-alpha05 содержит эти коммиты.
Котлин-преобразования
-
Transformations
теперь написаны на Котлине. Это изменение, несовместимое с исходным кодом для тех классов, написанных на Kotlin, которые напрямую использовали синтаксис, такой какTransformations.map
— код Kotlin теперь должен использовать синтаксис метода расширения Kotlin, который ранее был доступен только при использованииlifecycle-livedata-ktx
. При использовании языка программирования Java версии этих методов, принимающие методandroidx.arch.core.util.Function
, считаются устаревшими и заменяются версиями, принимающими KotlinFunction1
. Это изменение поддерживает двоичную совместимость. ( I8e14f ) -
ViewTreeViewModelStoreOwner
теперь написан на Kotlin. Это изменение, несовместимое с исходным кодом для классов, написанных на Kotlin — теперь вы должны напрямую импортировать и использовать методы расширения Kotlin вView
androidx.lifecycle.setViewTreeViewModelStoreOwner
иandroidx.lifecycle.findViewTreeViewModelStoreOwner
, чтобы установить и найти ранее установленного владельца. Он совместим на двоичном уровне и остается совместимым с исходным кодом для реализаций, написанных на языке программирования Java. ( Ia06d8 , Ib22d8 , b/240298691 ) - Интерфейс
HasDefaultViewModelProviderFactory
теперь написан на Kotlin. Это изменение, несовместимое с исходным кодом, для классов, написанных на Kotlin — теперь они должны переопределять свойстваdefaultViewModelProviderFactory
иdefaultViewModelCreationExtras
, а не реализовывать предыдущие соответствующие функции. ( Iaed9c , б/240298691 ) -
Observer
теперь написан на Kotlin. Его методonChanged()
теперь используетvalue
имени для своего параметра. ( Iffef2 , I4995e , b/240298691 ) -
AndroidViewModel
,AbstractSavedStateViewModelFactory
,LifecycleService
,ServiceLifecycleDispatcher
иProcessLifecycleOwner
теперь написаны на Kotlin ( I2e771 , Ibae40 , I160d7 , I08884 , I1cda7 , b/240298691 ).
Версия 2.6.0-альфа04
11 января 2023 г.
Выпущен androidx.lifecycle:lifecycle-*:2.6.0-alpha04
. Версия 2.6.0-alpha04 содержит эти коммиты.
Новые функции
-
LiveData
теперь включает новое свойствоisInitialized
, которое указывает, было ли когда-либо установлено явное значение дляLiveData
, что позволяет вам различатьliveData.value
, возвращающийnull
поскольку значение никогда не было установлено, или явноеnull
значение. ( Там же018 )
Изменения API
- API-интерфейсы
collectAsStateWithLifecycle()
дляlifecycle-runtime-compose
больше не находятся в экспериментальном состоянии. ( I09d42 , б / 258835424 ) - Методы
Lifecycle.launchWhenX
иLifecycle.whenX
устарели, так как использование диспетчера приостановки в некоторых случаях может привести к потере ресурсов. Рекомендуется использоватьLifecycle.repeatOnLifecycle
. ( Iafc54 , б/248302832 )
Котлин-преобразования
-
ViewTreeLifecycleOwner
теперь написан на Kotlin. Это изменение, несовместимое с исходным кодом для классов, написанных на Kotlin — теперь вы должны напрямую импортировать и использовать методы расширения Kotlin вView
androidx.lifecycle.setViewTreeLifecycleOwner
иandroidx.lifecycle.findViewTreeLifecycleOwner
, чтобы установить и найти ранее установленного владельца. Это заменяет предыдущее расширение Kotlin вlifecycle-runtime-ktx
. Он совместим на двоичном уровне и остается совместимым с исходным кодом для реализаций, написанных на языке программирования Java. ( I8a77a , I5234e , б/240298691 ) -
LiveDataReactiveStreams
теперь написан на Kotlin. Расширения Kotlin, ранее существовавшие вlifecycle-reactivestreams-ktx
были перенесены в модульlifecycle-reactivestreams
и стали основной поверхностью для кода, написанного на Kotlin. Это изменение, несовместимое с исходным кодом , для кода, написанного на Kotlin, если вы еще не использовали API-интерфейсы метода расширения Kotlin. ( I2b1b9 , I95d22 , б/240298691 ) -
DefaultLifecycleObserver
,LifecycleEventObserver
,Lifecycle
,LifecycleRegistry
,LifecycleObserver
иViewModelStore
теперь написаны на Kotlin ( Iadffd , ( I60034 , I8c52c , I9593d , I01fe1 , I59a23 , b/240298691 )
Исправления ошибок
-
SavedStateHandle
больше не аварийно завершает работу с исключениемClassCastException
при вызовеget()
с неправильным типом класса. ( I6ae7c )
Версия 2.6.0-альфа03
24 октября 2022 г.
Выпущен androidx.lifecycle:lifecycle-*:2.6.0-alpha03
. Версия 2.6.0-alpha03 содержит эти коммиты.
Исправления ошибок
- Исправлена проблема, из-за которой ограничения между различными модулями жизненного цикла не работали должным образом. ( I18d0d , б / 249686765 )
- Ошибки, вызываемые
LifecycleRegistry.moveToState()
теперь включают более полезные сообщения об ошибках, которые информируют разработчиков о компоненте, вызывающем ошибку. ( Idf4b2 , б/244910446 )
Версия 2.6.0-альфа02
7 сентября 2022 г.
Выпущен androidx.lifecycle:lifecycle-*:2.6.0-alpha02
. Версия 2.6.0-alpha02 содержит эти коммиты.
Изменения API
-
MediatorLiveData
теперь включает конструктор для установки начального значения. ( Ib6cc5 , б/151244085 )
Исправления ошибок
- Артефакты
Lifecycle
теперь включают ограничения , которые гарантируют, что все взаимозависимые артефакты жизненного цикла используют одну и ту же версию, автоматически обновляя другие зависимости при обновлении одной из них. б/242871265 -
FlowLiveData.asFlow()
теперь создаетcallbackFlow
вместо использования собственной реализацииChannel
для обеспечения потокобезопасности и сохранения контекста. ( I4a8b2 , б/200596935 ) - Функция
asLiveData
FlowLiveData
теперь сохраняет исходное значениеStateFlow
при создании нового объектаLiveData
. ( I3f530 , б/157380488 ) - Из жизненного цикла
2.5.1
: пользовательские реализацииAndroidViewModelFactory
теперь правильно вызывают функциюcreate(modelClass)
при использовании конструктора с отслеживанием состояния вLifecycle
2.4+ ( I5b315 , b/238011621 ).
Версия 2.6.0-альфа01
29 июня 2022 г.
Выпущен androidx.lifecycle:lifecycle-*:2.6.0-alpha01
. Версия 2.6.0-alpha01 содержит эти коммиты.
Новые функции
- Добавлено новое расширение для
StateFlow
иFlow
дляcollectAsStateWithLifecycle
, которое собирает данные из потоков и представляет свое последнее значение как Compose State с учетом жизненного цикла. Поток собирается, и для новой эмиссии устанавливается значение состояния, когда жизненный цикл находится как минимум в определенномLifecycle.State
. Когда жизненный цикл падает ниже этогоLifecycle.State
, сбор потока останавливается и значение State не обновляется. ( I1856e , б / 230557927 )
Версия 2.5
Версия 2.5.1
27 июля 2022 г.
Выпущен androidx.lifecycle:lifecycle-*:2.5.1
. Версия 2.5.1 содержит эти коммиты.
Исправления ошибок
- Пользовательские реализации
AndroidViewModelFactory
теперь правильно вызывают функциюcreate(modelClass)
при использовании конструктораAndroidViewModelFactory
с отслеживанием состояния вLifecycle
2.4+. ( I5b315 , б/238011621 )
Версия 2.5.0
29 июня 2022 г.
Выпущен androidx.lifecycle:lifecycle-*:2.5.0
. Версия 2.5.0 содержит эти коммиты.
Важные изменения с версии 2.4.0
SavedStateHandle
теперь предлагает APIgetStateFlow()
, который возвращает KotlinStateFlow
для мониторинга изменений значений в качестве альтернативы использованиюLiveData
.ViewModel CreationExtras — при написании пользовательского
ViewModelProvider.Factory
больше не требуется расширятьAndroidViewModelFactory
илиAbstractSavedStateViewModelFactory
для получения доступа кApplication
илиSavedStateHandle
соответственно. Вместо этого эти поля предоставляются каждому подклассуViewModelProvider.Factory
какCreationExtras
через новую перегрузкуcreate
:create(Class<T>, CreationExtras)
. Эти дополнительные возможности предоставляются автоматически вашим действием или фрагментом при использовании действий1.5.0
и фрагмента1.5.0
соответственно.class CustomFactory : ViewModelProvider.Factory { override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T { return when (modelClass) { HomeViewModel::class -> { // Get the Application object from extras val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY]) // Pass it directly to HomeViewModel HomeViewModel(application) } DetailViewModel::class -> { // Create a SavedStateHandle for this ViewModel from extras val savedStateHandle = extras.createSavedStateHandle() DetailViewModel(savedStateHandle) } else -> throw IllegalArgumentException("Unknown class $modelClass") } as T } }
lifecycle-viewmodel
теперь предоставляетviewModelFactory
Kotlin DSL, который позволяет вам определитьViewModelProvider.Factory
с помощью одного или нескольких лямбда-инициализаторов, по одному для каждого конкретного классаViewModel
, который поддерживает ваша пользовательская фабрика, используяCreationExtras
в качестве основного источника данных.val customFactory = viewModelFactory { // The return type of the lambda automatically sets what class this lambda handles initializer { // Get the Application object from extras provided to the lambda val application = checkNotNull(get(ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY)) HomeViewModel(application) } initializer { val savedStateHandle = createSavedStateHandle() DetailViewModel(savedStateHandle) } }
lifecycle-viewmodel-compose
теперь предлагает APIviewModel()
, который использует лямбда-фабрику для создания экземпляраViewModel
без необходимости создания собственногоViewModelProvider.Factory
.// Within a @Composable, you can now skip writing a custom Factory // and instead write a lambda to do the initialization of your ViewModel val detailViewModel = viewModel { // This lambda is only called the first time the ViewModel is created // and all CreationExtras are available inside the lambda val savedStateHandle = createSavedStateHandle() DetailViewModel(savedStateHandle) }
Интеграция SavedStateHandle Compose Saver — артефакт
lifecycle-viewmodel-compose
теперь содержит новые экспериментальные API вSavedStateHandle.saveable
, которые позволяют использовать поведение, подобноеrememberSaveable
, поддерживаемоеSavedStateHandle
из ViewModel.class ListScreenViewModel(handle: SavedStateHandle): ViewModel() { // This value survives both configuration changes and process death and recreation val editMode by handle.saveable { mutableStateOf(false) } }
Добавлен API
addCloseable()
и новая перегрузка конструктора, которая позволяет добавлять один или несколько объектовCloseable
вViewModel
, которые будут закрыты при очисткеViewModel
, не требуя какой-либо ручной работы вonCleared()
.Например, чтобы создать область сопрограммы, которую вы можете внедрить в ViewModel, но управлять ею посредством тестирования, вы можете создать
CoroutineScope
, реализующуюCloseable
:class CloseableCoroutineScope( context: CoroutineContext = SupervisorJob() + Dispatchers.Main.immediate ) : Closeable, CoroutineScope { override val coroutineContext: CoroutineContext = context override fun close() { coroutineContext.cancel() } }
Который затем можно использовать в конструкторе
ViewModel
, сохраняя при этом тот же срок службы, что иviewModelScope
:class TestScopeViewModel( val customScope: CloseableCoroutineScope = CloseableCoroutineScope() ) : ViewModel(customScope) { // You can now use customScope in the same way as viewModelScope }
Изменения в поведении
- Попытка переместить
Lifecycle.State
изINITIALIZED
вDESTROYED
теперь всегда будет вызывать исключениеIllegalStateException
независимо от того, есть ли уLifecycle
прикрепленный наблюдатель. -
LifecycleRegistry
теперь будет очищать своих наблюдателей, когда они достигают состоянияDESTROYED
.
Версия 2.5.0-rc02
15 июня 2022 г.
Выпущен androidx.lifecycle:lifecycle-*:2.5.0-rc02
. Версия 2.5.0-rc02 содержит эти коммиты.
Исправления ошибок
-
ViewModelProvider
больше не будет аварийно завершать работу при смешивании предыдущих версий зависимостей жизненного цикла compileOnly с версиями 2.5+. ( I81a66 , б/230454566 )
Версия 2.5.0-rc01
11 мая 2022 г.
Выпущен androidx.lifecycle:lifecycle-*:2.5.0-rc01
. Версия 2.5.0-rc01 содержит эти коммиты.
Исправления ошибок
-
MediatorLiveData.addSource()
теперь генерирует исключениеNullPointerException
при передачеnull
источника вместо распространенияnull
источника наблюдателям. ( Ibd0fb , b/123085232 )
Версия 2.5.0-бета01
20 апреля 2022 г.
Выпущен androidx.lifecycle:lifecycle-*:2.5.0-beta01
. Версия 2.5.0-beta01 содержит эти коммиты.
Изменения API
- Добавлены делегаты свойств
SavedStateHandle.saveable
для использования имен свойств в качестве ключей для сохранения состояния вSavedStateHandle
( I8bb86 , b/225014345 ).
Исправления ошибок
- Исправлена проблема, из-за которой вложение одного
NavHost
в другойNavHost
на неосновной нижней вкладке навигации приводило к исключениюIllegalStateException
при использовании нескольких обратных стеков. ( I11bd5 , б/228865698 )
Версия 2.5.0-альфа06
6 апреля 2022 г.
Выпущен androidx.lifecycle:lifecycle-*:2.5.0-alpha06
. Версия 2.5.0-alpha06 содержит эти коммиты.
Новые функции
- Добавьте экспериментальную перегрузку
MutableState
вSavedStateHandle.saveable
для проверки четности сrememberSaveable
( I38cfe , b/224565154 ).
Изменения API
-
CreationExtras
теперь является абстрактным, а не запечатанным. ( Ib8a7a )
Исправления ошибок
- Исправлено исключение
IllegalStateException: Already attached to lifecycleOwner
вызваннойSavedStateHandleController
. ( I7ea47 , б/215406268 )
Версия 2.5.0-альфа05
23 марта 2022 г.
Выпущен androidx.lifecycle:lifecycle-*:2.5.0-alpha05
. Версия 2.5.0-alpha05 содержит эти коммиты.
Новые функции
- Модуль
lifecycle-viewmodel-compose
теперь предоставляетSavedStateHandleSaver
— экспериментальный API, который обеспечивает правильную интеграцию значений вSavedStateHandle
с тем же сохраненным состоянием экземпляра, которое используетrememberSaveable
. ( Ia88b7 , р/195689777 )
Изменения API
- Исправлена проблема совместимости с Lifecycle 2.3 и более поздними версиями Lifecycle на Java. ( I52c8a , б / 219545060 )
Исправления ошибок
-
SavedStateViewFactory
теперь поддерживает использованиеCreationExtras
, даже если он был инициализирован с помощьюSavedStateRegistryOwner
. Если указаны дополнительные параметры, инициализированные аргументы игнорируются. ( I6c43b , б/224844583 )
Версия 2.5.0-альфа04
9 марта 2022 г.
Выпущен androidx.lifecycle:lifecycle-*:2.5.0-alpha04
. Версия 2.5.0-alpha04 содержит эти коммиты.
Изменения API
-
SavedStateHandle
теперь предлагает APIgetStateFlow()
, который возвращает KotlinStateFlow
для мониторинга изменений значений в качестве альтернативы использованиюLiveData
. ( Иад3аб , р/178037961 )
Версия 2.5.0-альфа03
23 февраля 2022 г.
Выпущен androidx.lifecycle:lifecycle-*:2.5.0-alpha03
. Версия 2.5.0-alpha03 содержит эти коммиты.
Новые функции
- Добавлен API
addCloseable()
и новая перегрузка конструктора, которая позволяет добавлять один или несколько объектовCloseable
вViewModel
, которые будут закрыты при очисткеViewModel
, не требуя какой-либо ручной работы вonCleared()
. ( I55ea0 ) -
lifecycle-viewmodel
теперь предоставляетInitializerViewModelFactory
, который позволяет добавлять лямбда-выражения для обработки определенных классовViewModel
, используяCreationExtras
в качестве основного источника данных. ( If58fc , б/216687549 ) -
lifecycle-viewmodel-compose
теперь предлагает APIviewModel()
, который использует лямбда-фабрику для создания экземпляраViewModel
без необходимости создания собственногоViewModelProvider.Factory
. ( I97fbb , б/216688927 )
Изменения API
- Теперь вы можете создать
ViewModel
с помощьюCreationExtras
черезlifecycle-viewmodel-compose
. ( I08887 , б / 216688927 )
Изменения в поведении
- Попытка переместить
Lifecycle.State
изINITIALIZED
вDESTROYED
теперь всегда будет вызывать исключениеIllegalStateException
независимо от того, есть ли уLifecycle
прикрепленный наблюдатель. ( I7c390 , б/177924329 ) -
LifecycleRegistry
теперь будет очищать своих наблюдателей, когда они достигают состоянияDESTROYED
. ( I4f8dd , б/142925860 )
Версия 2.5.0-альфа02
9 февраля 2022 г.
Выпущен androidx.lifecycle:lifecycle-*:2.5.0-alpha02
. Версия 2.5.0-alpha02 содержит эти коммиты.
Изменения API
-
SavedStateHandle
иSavedStateViewModelFactory
были преобразованы в Kotlin. Это улучшило возможность обнуления дженериков в обоих классах. ( Ib6ce2 , б/216168263 , I9647a , б/177667711 ) - Параметр функции
LiveData
switchMap
теперь может иметь вывод, допускающий значение NULL. ( I40396 , б / 132923666 ) - Расширения
LiveData
-ktx теперь помечены@CheckResult
, чтобы обеспечить использование результата при вызове этих функций. ( Ia0f05 , b/207325134 )
Изменения в поведении
-
SavedStateHandle
теперь правильно сохраняет значение defaultValue, когда значение для указанного ключа не существует. ( I1c6ce , б/178510877 )
Исправления ошибок
- Из жизненного цикла
2.4.1
: обновленlifecycle-process
, который теперь зависит от запуска 1.1.1 , чтобы гарантировать, что исправления, предотвращающие созданиеProcessLifecycleInitializer
исключенияStartupException
доступны по умолчанию. ( Ib01df , б/216490724 ) - Теперь улучшено сообщение об ошибке, когда пользовательские классы
AndroidViewModel
имеют параметры в неправильном порядке и пытаются создатьViewModel
. ( I340f7 , б/177667711 ) - Теперь вы можете создать модель представления с помощью
CreationExtras
, используяAndroidViewModelFactory
, без установки приложения. ( I6ebef , р/217271656 )
Версия 2.5.0-альфа01
26 января 2022 г.
Выпущен androidx.lifecycle:lifecycle-*:2.5.0-alpha01
. Версия 2.5.0-alpha01 содержит эти коммиты.
Создание модели представленияДополнительно
В этом выпуске мы закладываем основу для реструктуризации построения ViewModel
. Вместо жесткого набора подклассов ViewModelProvider.Factory
, каждый из которых добавляет дополнительную функциональность (позволяя использовать параметр конструктора Application
через AndroidViewModelFactory
, разрешая параметр конструктора SavedStateHandle
через SavedStateViewModelFactory
и AbstractSavedStateViewModelFactory
и т. д.), мы переходим в мир фабрик без сохранения состояния, которые полагаются на новую концепцию CreationExtras
. ( Я7343 , б/188691010 , б/188541057 )
Благодаря этому изменению ViewModelProvider
больше не выполняет прямые вызовы предыдущего метода create(Class<T>)
ViewModelProvider.Factory
. Вместо этого он вызывает новую перегрузку create
: create(Class<T>, CreationExtras)
. Это означает, что любая прямая реализация экземпляра ViewModelProvider.Factory
теперь имеет доступ к каждому из этих новых CreationExtras
:
-
ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY
: этаString
обеспечивает доступ к пользовательскому ключу, который вы передали вViewModelProvider.get()
. -
ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY
предоставляет доступ к классуApplication
. -
SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY
предоставляет доступ кSavedStateRegistryOwner
, который используется для создания этой ViewModel. -
SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY
предоставляет доступ кViewModelStoreOwner
, который используется для создания этой ViewModel. -
SavedStateHandleSupport.DEFAULT_ARGS_KEY
предоставляет доступ кBundle
аргументов, которые следует использовать для созданияSavedStateHandle
.
Эти дополнительные возможности предоставляются по умолчанию при использовании Activity 1.5.0-alpha01
, Fragment 1.5.0-alpha01
и Navigation 2.5.0-alpha01
. Если вы используете более раннюю версию этих библиотек, ваш CreationExtras
будет пустым — все существующие подклассы ViewModelProvider.Factory
были переписаны для поддержки как устаревшего пути создания, используемого более ранними версиями этих библиотек, так и пути CreationExtras
, который будет использоваться в дальнейшем.
Эти CreationExtras
позволяют вам создавать ViewModelProvider.Factory
, который передает только ту информацию, которая вам нужна, в каждую ViewModel
, не полагаясь на строгую иерархию подклассов Factory:
class CustomFactory : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
return when (modelClass) {
HomeViewModel::class -> {
// Get the Application object from extras
val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY])
// Pass it directly to HomeViewModel
HomeViewModel(application)
}
DetailViewModel::class -> {
// Create a SavedStateHandle for this ViewModel from extras
val savedStateHandle = extras.createSavedStateHandle()
DetailViewModel(savedStateHandle)
}
else -> throw IllegalArgumentException("Unknown class $modelClass")
} as T
}
}
Мы используем функцию расширения Kotlin createSavedStateHandle()
в CreationExtras
из SavedStateHandleSupport
, чтобы создать SavedStateHandle
только для той ViewModel, которая в этом нуждается. ( Я6654 , р/188541057 )
Пользовательские CreationExtras
могут быть предоставлены путем переопределения getDefaultViewModelCreationExtras()
в вашем ComponentActivity
или Fragment
, что делает их доступными для вашего пользовательского ViewModelProvider.Factory
как встроенную форму вспомогательного внедрения. Эти дополнительные возможности будут автоматически доступны вашей пользовательской фабрике при использовании непосредственно с ViewModelProvider
или при использовании расширений свойств Kotlin by viewModels()
и by activityViewModels()
. ( I79f2b , б / 207012584 , б / 207012585 , б / 207012490 )
Исправления ошибок
- Исправлена проблема, из-за которой значение по умолчанию, предоставленное для
SavedStateHandle
, снова появлялось после смерти и восстановления процесса, даже если оно было специально удалено изSavedStateHandle
. В результате этогоSavedStateHandle
больше не будет объединять значения по умолчанию и восстановленные значения, а вместо этого будет использовать только восстановленные значения в качестве источника истины. ( I53a4b )
Версия 2.4
Версия 2.4.1
9 февраля 2022 г.
Выпущен androidx.lifecycle:lifecycle-*:2.4.1
. Версия 2.4.1 содержит эти коммиты.
Исправления ошибок
- Перенесено из жизненного цикла
2.5.0-alpha01
: исправлена проблема, из-за которой значение по умолчанию, предоставленное дляSavedStateHandle
, снова появлялось после смерти и восстановления процесса, даже если оно было специально удалено изSavedStateHandle
. В результате этогоSavedStateHandle
больше не будет объединять значения по умолчанию и восстановленные значения, а вместо этого будет использовать только восстановленные значения в качестве источника истины. ( I53a4b ) -
lifecycle-process
теперь зависит от Androidx Startup 1.1.1 , в котором исправлена регрессия, при которой использованиеProcessLifecycleInitializer
вызывалоStartupException
. ( б / 216490724 )
Версия 2.4.0
27 октября 2021 г.
Выпущен androidx.lifecycle:lifecycle-*:2.4.0
. Версия 2.4.0 содержит эти коммиты.
Важные изменения с версии 2.3.0
-
@OnLifecycleEvent
устарел. Вместо этого следует использоватьLifecycleEventObserver
илиDefaultLifecycleObserver
. - Добавлена библиотека
androidx.lifecycle:lifecycle-viewmodel-compose
. Он предоставляет компонуемыйviewModel()
иLocalViewModelStoreOwner
.- Изменение исходного кода :
ViewModelProvider
был переписан на Kotlin. МетодViewModelProvider.Factory.create
больше не поддерживает универсальный тип, допускающий значение NULL.
- Изменение исходного кода :
- В
androidx.lifecycle:lifecycle-runtime-ktx
были добавлены новые API сопрограмм: -
Lifecycle.repeatOnLifecycle
— API, который выполняет блок кода в сопрограмме, когда жизненный цикл находится хотя бы в определенном состоянии. Блок будет отменен и перезапущен по мере того, как жизненный цикл входит в целевое состояние и выходит из него; -
Flow.flowWithLifecycle
— API, который выдает значения из восходящего потока, когда жизненный цикл находится хотя бы в определенном состоянии. -
DefaultLifecycleObserver
был перенесен сlifecycle.lifecycle-common-java8
наlifecycle.lifecycle-common
.lifecycle.lifecycle-common-java8
больше не предоставляет никаких дополнительных функций помимоlifecycle.lifecycle-common
, поэтому зависимость от него можно заменить наlifecycle.lifecycle-common
. - API, не относящиеся к сопрограммам, из
lifecycle-viewmodel-ktx
были перенесены в модульlifecycle-viewmodel
. lifecycle-process
теперь используетandroidx.startup
для инициализацииProcessLifecycleOwner
.Раньше это делал
androidx.lifecycle.ProcessLifecycleOwnerInitializer
.Если вы использовали
tools:node="remove"
ContentProvider
, который использовался для инициализации жизненного цикла процесса в прошлом, вместо этого вам необходимо сделать следующее.<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.lifecycle.ProcessLifecycleInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
(или)
<!-- If you want to disable androidx.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
Версия 2.4.0-rc01
29 сентября 2021 г.
androidx.lifecycle:lifecycle-*:2.4.0-rc01
выпущен без изменений по сравнению с Lifecycle 2.4.0-beta01. Версия 2.4.0-rc01 содержит эти коммиты.
Версия 2.4.0-бета01
15 сентября 2021 г.
Выпущен androidx.lifecycle:lifecycle-*:2.4.0-beta01
. Версия 2.4.0-beta01 содержит эти коммиты.
Изменения API
-
@OnLifecycleEvent
устарел. Вместо этого следует использоватьLifecycleEventObserver
илиDefaultLifecycleObserver
. ( I5a8fa ) - DefaultLifecycleObserver был перенесен с
androidx.lifecycle.lifecycle-common-java8
наandroidx.lifecycle.lifecycle-common
.androidx.lifecycle.lifecycle-common-java8
больше не предоставляет никаких дополнительных функций поверхandroidx.lifecycle.lifecycle-common
, поэтому зависимость от него можно заменить наandroidx.lifecycle.lifecycle-common
. ( I021aa ) - API, не относящиеся к сопрограммам, из
lifecycle-viewmodel-ktx
были перенесены в модульlifecycle-viewmodel
. ( I6d5b2 )
Внешний вклад
Версия 2.4.0-альфа03
4 августа 2021 г.
Выпущен androidx.lifecycle:lifecycle-*:2.4.0-alpha03
. Версия 2.4.0-alpha03 содержит эти коммиты.
Изменения API
- Source-breaking change : ViewModelProvider has been rewritten in Kotlin.
ViewModelProvider.Factory.create
method no longer allows nullable generic. ( I9b9f6 )
Изменения поведения
- The
Lifecycle.repeatOnLifecycle
:block
is now always invoked serially when repeating execution. ( Ibab33 )
Внешний вклад
- Thanks chao2zhang for fixing the code snippets in the
repeatOnLifecycle
documentation. #205 .
Version 2.4.0-alpha02
16 июня 2021 г.
androidx.lifecycle:lifecycle-*:2.4.0-alpha02
is released. Version 2.4.0-alpha02 contains these commits.
Новые функции
- Added a new
RepeatOnLifecycleWrongUsage
lint check tolifecycle-runtime-ktx
that detects whenrepeateOnLifecycle
is incorrectly used inonStart()
oronResume()
. ( 706078 , b/187887400 )
Изменения API
- The
LifecycleOwner.addRepeatingJob
API is removed in favor ofLifecycle.repeatOnLifecycle
that respects structured concurrency and is easier to reason about. ( I4a3a8 ) - Make
ProcessLifecycleInitializer
public so otherandroidx.startup.Initializer
s can use these as dependencies. ( I94c31 )
Исправления ошибок
- Fixed an issue with the
NullSafeMutableLiveData
lint check when the field has modifiers. ( #147 , b/183696616 ) - Fixed another issue with the
NullSafeMutableLiveData
lint check when using generics. ( #161 , b/184830263 )
Внешний вклад
- Thanks maxsav for improving the
NullSafeMutableLiveData
lint check. ( #147 , b/183696616 ) - Thanks kozaxinan for improving the
NullSafeMutableLiveData
lint check. ( #161 , b/184830263 )
Version 2.4.0-alpha01
24 марта 2021 г.
androidx.lifecycle:lifecycle-*:2.4.0-alpha01
is released. Version 2.4.0-alpha01 contains these commits.
Изменения поведения
lifecycle-process
now usesandroidx.startup
to initialize theProcessLifecycleOwner
.Previously, this was being done by
androidx.lifecycle.ProcessLifecycleOwnerInitializer
.If you used
tools:node="remove"
theContentProvider
being used to initialize process lifecycle in the past, then you need to do the following instead.<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.lifecycle.ProcessLifecycleInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
(или)
<!-- If you want to disable androidx.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
Изменения API
- Added a
Flow.flowWithLifecycle
API that emits values from the upstream Flow when the lifecycle is at least in a certain state using theLifecycle.repeatOnLifecycle
API. This is an alternative to the also newLifecycleOwner.addRepeatinJob
API. ( I0f4cd )
Исправления ошибок
- From Lifecycle 2.3.1 : The
NonNullableMutableLiveData
lint rule can now properly differentiate between field variables with different nullability. ( b/169249668 )
Lifecycle Viewmodel Compose Version 1.0.0
Version 1.0.0-alpha07
16 июня 2021 г.
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07
is released. Version 1.0.0-alpha07 contains these commits.
Breaking API Changes
-
viewModel()
now takes an optionalViewModelStoreOwner
, making it easier to work with owners other than theLocalViewModelStoreOwner
. For example, you can now useviewModel(navBackStackEntry)
to retrieve a ViewModel associated with a particular navigation graph. ( I2628d , b/188693123 )
Version 1.0.0-alpha06
June 2, 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06
is released. Version 1.0.0-alpha06 contains these commits.
Updated to be compatible with Compose version 1.0.0-beta08
.
Version 1.0.0-alpha05
18 мая 2021 г.
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05
is released. Version 1.0.0-alpha05 contains these commits.
Новые функции
- Updated to be compatible with Compose version
1.0.0-beta07
.
Исправления ошибок
- The AndroidManifest files from ui-test-manifest and ui-tooling-data are now compatible with Android 12 ( I6f9de , b/184718994 )
Version 1.0.0-alpha04
7 апреля 2021 г.
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04
is released. Version 1.0.0-alpha04 contains these commits.
Dependency Changes
- This version allows
androidx.hilt:hilt-navigation-compose
andandroidx.navigation:navigation-compose
to sync dependencies onandroidx.compose.compiler:compiler:1.0.0-beta04
andandroidx.compose.runtime:runtime:1.0.0-beta04
. For 1.0.0, it is required that the compiler and runtime match.
Version 1.0.0-alpha03
10 марта 2021 г.
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha03
is released. Version 1.0.0-alpha03 contains these commits.
Изменения API
-
LocalViewModelStoreOwner.current
now returns a nullableViewModelStoreOwner
to better determine whether aViewModelStoreOwner
is available in the current composition. APIs that require aViewModelStoreOwner
, such asviewModel()
andNavHost
, still throw an exception if aViewModelStoreOwner
is not set. ( Idf39a )
Lifecycle-Viewmodel-Compose Version 1.0.0-alpha02
24 февраля 2021 г.
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02
is released. Version 1.0.0-alpha02 contains these commits.
Изменения API
-
LocalViewModelStoreOwner
now has aprovides
functions that can be used withCompositionLocalProvider
, replacing theasProvidableCompositionLocal()
API. ( I45d24 )
Lifecycle-Viewmodel-Compose Version 1.0.0-alpha01
10 февраля 2021 г.
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01
is released. Version 1.0.0-alpha01 contains these commits.
Новые функции
- The
viewModel()
composable andLocalViewModelStoreOwner
were moved fromandroidx.compose.ui.viewinterop
to this artifact in theandroidx.lifecycle.viewmodel.compose
package. ( I7a374 )
Версия 2.3.1
Lifecycle Version 2.3.1
24 марта 2021 г.
androidx.lifecycle:lifecycle-*:2.3.1
is released. Version 2.3.1 contains these commits.
Исправления ошибок
- The
NonNullableMutableLiveData
lint rule can now properly differentiate between field variables with different nullability. ( b/169249668 )
Версия 2.3.0
Версия 2.3.0
10 февраля 2021 г.
androidx.lifecycle:lifecycle-*:2.3.0
is released. Version 2.3.0 contains these commits.
Major changes since 2.2.0
-
SavedStateHandle
support for non-parcelable classes :SavedStateHandle
now supports lazy serialization by allowing you to callsetSavedStateProvider()
for a given key, providing aSavedStateProvider
that will get a callback tosaveState()
when theSavedStateHandle
is asked to save its state. See Saving non-parcelable classes . - Lifecycle Behavior Enforcement :
- LifecycleRegistry now enforces
DESTROYED
as a terminal state. -
LifecycleRegistry
now verifies that its methods are called on main thread. It was always a requirement for lifecycles of activities, fragments etc. An addition of observers from non-main threads resulted in hard to catch crashes in runtime. ForLifecycleRegistry
objects that owned by your own components, you can explicitly opt out from checks by usingLifecycleRegistry.createUnsafe(...)
, but then you have to ensure that a proper synchronization is in place when thisLifecycleRegistry
is accessed from different threads.
- LifecycleRegistry now enforces
- Lifecycle State and Event Helpers : Added static helper methods of
downFrom(State)
,downTo(State)
,upFrom(State)
,upTo(State)
toLifecycle.Event
for generating theEvent
given aState
and transition direction. Added thegetTargetState()
method that provides theState
that the Lifecycle will transition to directly following theEvent
. -
withStateAtLeast
: AddedLifecycle.withStateAtLeast
APIs that await a lifecycle state and run a non-suspending block of code synchronously at the point of state change, then resume with the result. These APIs differ from the existingwhen*
methods as they do not permit running suspending code and do not employ a custom dispatcher. ( aosp/1326081 ) -
ViewTree
APIs : A newViewTreeLifecycleOwner.get(View)
andViewTreeViewModelStoreOwner.get(View)
API allows you to retrieve the containingLifecycleOwner
andViewModelStoreOwner
, respectively, given aView
instance. You must upgrade to Activity1.2.0
and Fragment1.3.0
, and AppCompat 1.3.0-alpha01 or higher to populate this correctly. ThefindViewTreeLifecycleOwner
andfindViewTreeViewModelStoreOwner
Kotlin extensions are available inlifecycle-runtime-ktx
andlifecycle-viewmodel-ktx
, respectively. -
LiveData.observe()
Kotlin extension deprecation : TheLiveData.observe()
Kotlin extension necessary to use lambda syntax is now deprecated as it is not necessary when using Kotlin 1.4.
Version 2.3.0-rc01
16 декабря 2020 г.
androidx.lifecycle:lifecycle-*:2.3.0-rc01
is released. Version 2.3.0-rc01 contains these commits.
Исправления ошибок
- The
keys()
method ofSavedStateHandle
is now consistent before and after the state is saved - it now includes keys previously used withsetSavedStateProvider()
in addition to the keys used withset()
andgetLiveData()
. ( aosp/1517919 , b/174713653 )
Внешний вклад
- The APIs to suspend Lifecycle-aware coroutines now better handle calls to
yield()
. Thanks Nicklas Ansman Giertz! ( aosp/1430830 , b/168777346 )
Version 2.3.0-beta01
1 октября 2020 г.
androidx.lifecycle:lifecycle-*:2.3.0-beta01
is released. Version 2.3.0-beta01 contains these commits.
Изменения API
- The
LiveData.observe()
Kotlin extension necessary to use lambda syntax is now deprecated as it is not necessary when using Kotlin 1.4. ( I40d3f )
Исправления ошибок
- Upgrade androidx to use Kotlin 1.4 ( Id6471 , b/165307851 , b/165300826 )
Documentation Changes
- The
liveData
builder andasLiveData()
docs have been updated to include details about changing the given timeout values. ( aosp/1122324 )
Version 2.3.0-alpha07
August 19, 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha07
is released. Version 2.3.0-alpha07 contains these commits.
Исправления ошибок
- Fixed a crash issue in the
NullSafeMutableLiveData
Lint check. ( aosp/1395367 )
Version 2.3.0-alpha06
22 июля 2020 г.
androidx.lifecycle:lifecycle-*:2.3.0-alpha06
is released. Version 2.3.0-alpha06 contains these commits.
Новые функции
- Added static helper methods of
downFrom(State)
,downTo(State)
,upFrom(State)
,upTo(State)
toLifecycle.Event
for generating theEvent
given aState
and transition direction. Added thegetTargetState()
method that provides theState
that the Lifecycle will transition to directly following theEvent
. ( I00887 ) - Added
Lifecycle.withStateAtLeast
APIs that await a lifecycle state and run a non-suspending block of code synchronously at the point of state change, then resume with the result. These APIs differ from the existingwhen*
methods as they do not permit running suspending code and do not employ a custom dispatcher. ( aosp/1326081 )
Изменения поведения
- LifecycleRegistry now enforces
DESTROYED
as a terminal state. ( I00887 ) -
LifecycleRegistry
now verifies that its methods are called on main thread. It was always a requirement for lifecycles of activities, fragments etc. An addition of observers from non-main threads resulted in hard to catch crashes in runtime. ForLifecycleRegistry
objects that owned by your own components, you can explicitly opt out from checks by usingLifecycleRegistry.createUnsafe(...)
, but then you have to ensure that a proper synchronization is in place when thisLifecycleRegistry
is accessed from different threads ( Ie7280 , b/137392809 )
Исправления ошибок
- Fixed a crash in
NullSafeMutableLiveData
. ( b/159987480 ) - Fixed an
ObsoleteLintCustomCheck
for Lint checks bundled withlifecycle-livedata-core-ktx
(and specificallyNullSafeMutableLiveData
). ( b/158699265 )
Version 2.3.0-alpha05
24 июня 2020 г.
androidx.lifecycle:lifecycle-*:2.3.0-alpha05
is released. Version 2.3.0-alpha05 contains these commits.
Исправления ошибок
-
LiveData
now better handles reentrant cases, avoiding duplicate calls toonActive()
oronInactive()
. ( b/157840298 ) - Fixed an issue where Lint checks would not run when using Android Studio 4.1 Canary 6 or higher. ( aosp/1331903 )
Version 2.3.0-alpha04
June 10, 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha04
is released. Version 2.3.0-alpha04 contains these commits.
Исправления ошибок
- Fixed a crash in the
NonNullableMutableLiveData
Lint check. ( b/157294666 ) - The
NonNullableMutableLiveData
Lint check now covers significantly more cases where anull
value was set on aMutableLiveData
with a non-null type parameter. ( b/156002218 )
Version 2.3.0-alpha03
20 мая 2020 г.
androidx.lifecycle:lifecycle-*:2.3.0-alpha03
are released. Version 2.3.0-alpha03 contains these commits.
Новые функции
-
SavedStateHandle
now supports lazy serialization by allowing you to callsetSavedStateProvider()
for a given key, providing aSavedStateProvider
that will get a callback tosaveState()
when theSavedStateHandle
is asked to save its state. ( b/155106862 ) - A new
ViewTreeViewModelStoreOwner.get(View)
API allows you to retrieve the containingViewModelStoreOwner
given aView
instance. You must upgrade to Activity1.2.0-alpha05
, Fragment1.3.0-alpha05
, and AppCompat1.3.0-alpha01
to populate this correctly. AfindViewModelStoreOwner()
Kotlin extension has been added tolifecycle-viewmodel-ktx
. ( aosp/1295522 )
Исправления ошибок
- Fixed an issue that caused the
MutableLiveData
Lint checks released in Lifecycle2.3.0-alpha01
from being published alongside thelifecycle-livedata-core-ktx
artifact. ( b/155323109 )
Version 2.3.0-alpha02
29 апреля 2020 г.
androidx.lifecycle:lifecycle-*:2.3.0-alpha02
is released. Version 2.3.0-alpha02 contains these commits.
Изменения API
-
SavedStateViewModelFactory
now allows you to pass a nullApplication
to its constructor to better support cases where one is not readily available and support forAndroidViewModel
is not needed. ( aosp/1285740 )
Исправления ошибок
- Improved cold start performance by avoiding class verification failure on API 28 and lower devices. ( aosp/1282118 )
Version 2.3.0-alpha01
March 4, 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha01
is released. Version 2.3.0-alpha01 contains these commits.
Новые функции
- A new
ViewTreeLifecycleOwner.get(View)
API allows you to retrieve the containingLifecycleOwner
given aView
instance. You must upgrade to Activity1.2.0-alpha01
and Fragment1.3.0-alpha01
to populate this correctly. AfindViewTreeLifecycleOwner
Kotlin extension is available inlifecycle-runtime-ktx
. ( aosp/1182361 , aosp/1182956 ) - Added a new Lint check that warns you when setting a
null
value on aMutableLiveData
that has been defined in Kotlin as non-null. This is available when using thelivedata-core-ktx
orlivedata-ktx
artifacts. ( aosp/1154723 , aosp/1159092 ) - A new
lifecycle-runtime-testing
artifact is available that provides aTestLifecycleOwner
that implementsLifecycleOwner
and provides a thread safe mutableLifecycle
. ( aosp/1242438 )
Исправления ошибок
- The
lifecycle-runtime
artifact now has a unique package name. ( aosp/1187196 )
Version 2.2.0
ViewModel-Savedstate Version 2.2.0
5 февраля 2020 г.
androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0
is released. Version 2.2.0 contains these commits .
Lifecycle ViewModel SavedState now shares the same version as other Lifecycle artifacts. The behavior of 2.2.0
is identical to the behavior of 1.0.0
.
Version 2.2.0
22 января 2020 г.
androidx.lifecycle:lifecycle-*:2.2.0
is released. Version 2.2.0 contains these commits .
Important changes since 2.1.0
- Lifecycle Coroutine Integration : The new
lifecycle-runtime-ktx
artifact adds integration between Lifecycle and Kotlin coroutines. Thelifecycle-livedata-ktx
has also been expanded to take advantage of coroutines. See Use Kotlin coroutines with Architecture Components for more details. -
ViewModelProviders.of()
deprecation :ViewModelProviders.of()
has been deprecated. You can pass aFragment
orFragmentActivity
to the newViewModelProvider(ViewModelStoreOwner)
constructor to achieve the same functionality when using Fragment1.2.0
. -
lifecycle-extensions
Artifact Deprecation : With the above deprecation ofViewModelProviders.of()
, this release marks the deprecation of the last API inlifecycle-extensions
and this artifact should now be considered deprecated in its entirety. We strongly recommend depending on the specific Lifecycle artifacts you need (such aslifecycle-service
if you're usingLifecycleService
andlifecycle-process
if you're usingProcessLifecycleOwner
) rather thanlifecycle-extensions
as there will not be a future2.3.0
release oflifecycle-extensions
. - Gradle Incremental Annotation Processor : Lifecycle's annotation processor is incremental by default. If your app is written in the Java 8 programming language you can use
DefautLifecycleObserver
instead; and if it's written in the Java 7 programming language you can useLifecycleEventObserver
.
Version 2.2.0-rc03
4 декабря 2019 г.
androidx.lifecycle:lifecycle-*:2.2.0-rc03
is released. Version 2.2.0-rc03 contains these commits .
Исправления ошибок
- Fixed a failure occurring when a mocked
ViewModel
was stored inViewModelStore
and queried later with default factory. - Fix a usage of
Dispatchers.Main.immediate
inlaunchWhenCreated
and similar methods to be called synchronously during corresponding lifecycle event. ( aosp/1156203 )
Внешние взносы
- Thanks to Anders Järleberg for contributing the fix! ( aosp/1156203 )
- Thanks to Vsevolod Tolstopyatov from Jetbrains for reviewing an implementation of inlined execution.
Dependency changes
- Lifecycle Extensions now depends on Fragment
1.2.0-rc03
.
Version 2.2.0-rc02
7 ноября 2019 г.
androidx.lifecycle:lifecycle-*:2.2.0-rc02
is released. Version 2.2.0-rc02 contains these commits .
Исправления ошибок
- Fixed a bug in the proguard setup of the library that affected devices running API 28+ if the target API is below 29. ( b/142778206 )
Version 2.2.0-rc01
23 октября 2019 г.
androidx.lifecycle:lifecycle-*:2.2.0-rc01
is released. Version 2.2.0-rc01 contains these commits .
Исправления ошибок
- Fixed an issue where
launchWhenCreated
and related methods would run one frame later than the associated lifecycle method due to its use ofDispatchers.Main
instead ofDispatchers.Main.immediate
. ( aosp/1145596 )
Внешние взносы
- Thanks to Nicklas Ansman for contributing the fix! ( aosp/1145596 )
Version 2.2.0-beta01
October 9, 2019
androidx.lifecycle:lifecycle-*:2.2.0-beta01
is released. Version 2.2.0-beta01 contains these commits .
Исправления ошибок
- Fixed a regression introduced in Lifecycle 2.2.0-alpha05 in the ordering of
ProcessLifecycleOwner
and the activity'sLifecycleOwner
moving to started and resumed on Android 10 devices. ( aosp/1128132 ) - Fixed a regression introduced in Lifecycle
2.2.0-alpha05
which would cause aNullPointerException
when using version2.0.0
or2.1.0
oflifecycle-process
. ( b/141536990 )
Version 2.2.0-alpha05
18 сентября 2019 г.
androidx.lifecycle:lifecycle-*:2.2.0-alpha05
is released. Version 2.2.0-alpha05 contains these commits .
Исправления ошибок
- Fixed a race condition in coroutine livedata builder. b/140249349
Version 2.2.0-alpha04
September 5, 2019
androidx.lifecycle:lifecycle-*:2.2.0-alpha04
is released. The commits included in this version can be found here .
Новые функции
-
lifecycleScope
,whenCreated
,whenStarted
,whenResumed
,viewModelScope
, and the underlying implementation ofliveData
now useDispatchers.Main.immediate
instead ofDispatchers.Main
. ( b/139740492 )
Внешние взносы
- Thanks to Nicklas Ansman for contributing the move to
Dispatchers.Main.immediate
! ( aosp/1106073 )
Version 2.2.0-alpha03
August 7, 2019
androidx.lifecycle:lifecycle-*:2.2.0-alpha03
is released. The commits included in this version can be found here .
Новые функции
- Implementations of
ViewModelStoreOwner
can now optionally implementHasDefaultViewModelProviderFactory
to provide a defaultViewModelProvider.Factory
. This has been done for Activity1.1.0-alpha02
, Fragment1.2.0-alpha02
, and Navigation2.2.0-alpha01
. ( aosp/1092370 , b/135716331 )
Изменения API
-
ViewModelProviders.of()
has been deprecated. You can pass aFragment
orFragmentActivity
to the newViewModelProvider(ViewModelStoreOwner)
constructor to achieve the same functionality. ( aosp/1009889 )
Version 2.2.0-alpha02
2 июля 2019 г.
androidx.lifecycle:*:2.2.0-alpha02
is released. The commits included in this version can be found here .
Изменения API
- Replaced
LiveDataScope.initialValue
withLiveDataScope.latestValue
which will track the current emitted value of theliveData
block. - Added a new overload to the
liveData
builder that receivestimeout
parameter as typeDuration
Version 2.2.0-alpha01
7 мая 2019 г.
androidx.lifecycle:*:2.2.0-alpha01
is released. The commits included in this version can be found here .
Новые функции
- This release adds new features that adds support for Kotlin coroutines for Lifecycle and LiveData. Detailed documentation on them can be found here .
ViewModel-SavedState Version 1.0.0
Версия 1.0.0
22 января 2020 г.
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0
is released. Version 1.0.0 contains these commits .
Important features in 1.0.0
- New SavedStateHandle class was added. It enables your
ViewModel
classes to access and to contribute to the saved state. This object can be received in constructor ofViewModel
class and factories provided by default by Fragments and AppCompatActivity will injectSavedStateHandle
automatically. - AbstractSavedStateViewModelFactory was added. It allows you to create custom factories for your
ViewModel
and provide them access toSavedStateHandle
.
ViewModel-Savedstate Version 1.0.0-rc03
4 декабря 2019 г.
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03
is released. Version 1.0.0-rc03 contains these commits .
Dependency changes
- Lifecycle ViewModel SavedState now depends on Lifecycle
2.2.0-rc03
.
Viewmodel-Savedstate Version 1.0.0-rc02
7 ноября 2019 г.
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc02
is released. Version 1.0.0-rc02 contains these commits .
Dependency changes
- Now depends on lifecycle
2.2.0-rc02
.
ViewModel-SavedState Version 1.0.0-rc01
23 октября 2019 г.
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01
is released with no changes from 1.0.0-beta01
. Version 1.0.0-rc01 contains these commits .
ViewModel-Savedstate Version 1.0.0-beta01
October 9, 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01
is released. Version 1.0.0-beta01 contains these commits .
Исправления ошибок
- Fixed an issue where accessing a SavedState ViewModel for the first time in
Activity.onActivityResult()
would result in anIllegalStateException
. ( b/139093676 ) - Fixed an
IllegalStateException
when usingAbstractSavedStateViewModelFactory
. ( b/141225984 )
ViewModel-SavedState Version 1.0.0-alpha05
18 сентября 2019 г.
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha05
is released. Version 1.0.0-alpha05 contains these commits .
Изменения API
-
SavedStateViewModelFactory
no longer extendsAbstractSavedStateViewModelFactory
andSavedStateHandle
is created only for ViewModels that requested have it ( aosp/1113593 )
ViewModel-SavedState Version 1.0.0-alpha03
August 7, 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03
is released. The commits included in this version can be found here .
Критические изменения
-
lifecycle-viewmodel-savedstate
no longer depends onfragment
and the relatedSavedStateViewModelFactory(Fragment)
andSavedStateViewModelFactory(FragmentActivity)
constructors have been removed. Instead,SavedStateViewModelFactory
is now the default factory for Activity1.1.0-alpha02
, Fragment1.2.0-alpha02
, and Navigation2.2.0-alpha01
. ( b/135716331 )
ViewModel-SavedState Version 1.0.0-alpha02
2 июля 2019 г.
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha02
is released. The commits included in this version can be found here .
Новые функции
- Added
SavedStateHandle.getLiveData()
overload which accepts a default value.
Изменения API
-
SavedStateVMFactory
is renamed toSavedStateViewModelFactory
. -
AbstractSavedStateVMFactory
is renamed toAbstractSavedStateViewModelFactory
.
ViewModel-Savedstate Version 1.0.0-alpha01
13 марта 2019 г.
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01
is released. The full commit log for this initial release can be found here .
Новые функции
- Now
ViewModels
can contribute to savedstate. To do that you use newly introduced viewmodel's factorySavedStateVMFactory
and your ViewModel should have a constructor that receivesSavedStateHandle
object as a parameter.
Версия 2.1.0
Important changes since 2.0.0
- Added
LifecycleEventObserver
for the cases when a stream of lifecycle events is needed. It is a public API instead of a hiddenGenericLifecycleObserver
class. - Added ktx extensions for
LiveData.observe
methods andTransformations.*
methods. - Added
Transformations.distinctUntilChanged
, which creates a new LiveData object that does not emit a value until the sourceLiveData
value has been changed. - Added coroutine support in ViewModels by adding the extension property
ViewModel.viewModelScope
.
Версия 2.1.0
September 5, 2019
androidx.lifecycle:lifecycle-*:2.1.0
is released. The commits included in this version can be found here .
Version 2.1.0-rc01
2 июля 2019 г.
androidx.lifecycle:*:2.1.0-rc01
is released with no changes from androidx.lifecycle:*:2.1.0-beta01
. The commits included in this version can be found here .
Version 2.1.0-beta01
7 мая 2019 г.
androidx.lifecycle:*:2.1.0-beta01
is released. The commits included in this version can be found here .
Новые функции
- Lifecycles are graduated to beta: api introduced in previous alphas such as
liveData
extension functions for transformations and observations,ViewModel
initialisation with property delegation and others are stabilised and not going to change.
Version 2.1.0-alpha04
3 апреля 2019 г.
androidx.lifecycle:*:2.1.0-alpha04
is released. The commits included in this version can be found here .
Изменения API
- Breaking change: the underlying API behind
by viewModels()
andby activityViewModels()
has been changed to support aViewModelStore
directly, rather than only aViewModelStoreOwner
. ( aosp/932932 )
Version 2.1.0-alpha03
13 марта 2019 г.
androidx.lifecycle:*:2.1.0-alpha03
is released. The full list of commits included in this version can be found here .
Изменения API
-
ViewModelProvider.KeyedFactory
was removed. Second interface in addition toViewModelProvider.Factory
didn't compose well with new features as property delegation in Kotlinby viewmodels {}
. ( aosp/914133 )
Version 2.1.0-alpha02
30 января 2019 г.
androidx.lifecycle 2.1.0-alpha02
is released.
Изменения API
-
LifecycleRegistry
now contains asetCurrentState()
method that replaces the now deprecatedsetState()
method. ( aosp/880715 )
Исправления ошибок
- Fixed an issue where mock
ViewModel
instances would crash when the containingViewModelStore
was cleared. b/122273087
Version 2.1.0-alpha01
17 декабря 2018 г.
androidx.lifecycle 2.1.0-alpha01
is released.
Новые функции
- Added
LifecycleEventObserver
for the cases when a stream of lifecycle events is needed. It is a public api instead of a hiddenGenericLifecycleObserver
class. - Added ktx extensions for
LiveData.observe
methods andTransformations.*
methods. - Method
Transformations.distinctUntilChanged
was added. It creates a newLiveData
object that does not emit a value until the source LiveData value has been changed. - Coroutine support in ViewModels: extension property
ViewModel.viewModelScope
was added. - Added
ViewModelProvider.KeyedFactory
, a factory for ViewModels that receiveskey
andClass
increate
method.
Версия 2.0.0
Версия 2.0.0
21 сентября 2018 г.
Lifecycle 2.0.0
is released with one bugfix from 2.0.0-rc01
in ViewModel.
Исправления ошибок
- Fixed a ViewModel proguard rule that incorrectly removed constructors b/112230489
Version 2.0.0-beta01
2 июля 2018 г.
Исправления ошибок
- Fixed LifecycleObserver proguard rule to keep only implementations, not subinterfaces b/71389427
- Fixed ViewModel proguard rules to allow obfuscation and shrinking
Pre-AndroidX Versions
For the pre-AndroidX versions of Lifecycle that follow, include these dependencies:
dependencies {
def lifecycle_version = "1.1.1"
// ViewModel and LiveData
implementation "android.arch.lifecycle:extensions:$lifecycle_version"
// alternatively - just ViewModel
implementation "android.arch.lifecycle:viewmodel:$lifecycle_version" // For Kotlin use viewmodel-ktx
// alternatively - just LiveData
implementation "android.arch.lifecycle:livedata:$lifecycle_version"
// alternatively - Lifecycles only (no ViewModel or LiveData).
// Support library depends on this lightweight import
implementation "android.arch.lifecycle:runtime:$lifecycle_version"
annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version" // For Kotlin use kapt instead of annotationProcessor
// alternately - if using Java8, use the following instead of compiler
implementation "android.arch.lifecycle:common-java8:$lifecycle_version"
// optional - ReactiveStreams support for LiveData
implementation "android.arch.lifecycle:reactivestreams:$lifecycle_version"
// optional - Test helpers for LiveData
testImplementation "android.arch.core:core-testing:$lifecycle_version"
}
Версия 1.1.1
March 21, 2018
Only one small change: android.arch.core.util.Function
is moved from arch:runtime
to arch:common
. This allows it to be used without the runtime dependency, eg in paging:common
below.
lifecycle:common
is a dependency of lifecycle:runtime
, so this change doesn't affect lifecycle:runtime
directly, only modules that depend directly on lifecycle:common
, as Paging does.
Версия 1.1.0
January 22, 2018
Packaging Changes
New, much smaller dependencies are now available:
-
android.arch.lifecycle:livedata:1.1.0
-
android.arch.lifecycle:viewmodel:1.1.0
Изменения API
- The deprecated
LifecycleActivity
andLifecycleFragment
have now been removed - please useFragmentActivity
,AppCompatActivity
or supportFragment
. -
@NonNull
annotations have been added toViewModelProviders
andViewModelStores
-
ViewModelProviders
constructor has been deprecated - please use its static methods directly -
ViewModelProviders.DefaultFactory
has been deprecated - please useViewModelProvider.AndroidViewModelFactory
- The static
ViewModelProvider.AndroidViewModelFactory.getInstance(Application)
method has been added to retrieve a staticFactory
suitable for creatingViewModel
andAndroidViewModel
instances.