Жизненный цикл

Компоненты, поддерживающие жизненный цикл, выполняют действия в ответ на изменение статуса жизненного цикла другого компонента, например, действия и фрагменты. Эти компоненты помогают вам создавать более организованный и часто более легкий код, который легче поддерживать.

В этой таблице перечислены все артефакты в группе androidx.lifecycle .

Артефакт Стабильный релиз Кандидат на релиз Бета-релиз Альфа-релиз
жизненный цикл-* 2.9.0 - - -
жизненный цикл-видмодель-навигация3 - - - 1.0.0-альфа01
Последнее обновление этой библиотеки: 23 мая 2025 г.

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

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

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

Котлин

Круто

    dependencies {
        def lifecycle_version = "2.9.0"
        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:1.0.0-alpha01"

        // 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.0"
        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:1.0.0-alpha01")

        // 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.0"
        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.0"
        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 лучше. Сообщите нам, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете добавить свой голос к существующей проблеме, нажав кнопку со звездочкой.

Создать новый выпуск

Более подробную информацию смотрите в документации Issue Tracker .

Lifecycle ViewModel Navigation3 Версия 1.0.0

Версия 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.9

Версия 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 содержит эти коммиты .

Версия 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 , чтобы гарантировать, что изменения в состоянии Lifecycle правильно вызывают перекомпозицию. Спасибо, Стивен Шен! ( 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 , что приводит к ненужным накладным расходам. Используйте ViewModelProvider.Factory с CreationExtras.createSavedStateHandle вместо этого для более эффективного создания ViewModel . ( 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 , извлеченные через соответствующие API findViewTree , теперь могут быть разрешены через непересекающиеся родительские элементы представления, такие как ViewOverlay . См. заметки о выпуске ядра или документацию в ViewTree.setViewTreeDisjointParent для получения дополнительной информации о непересекающихся родительских элементах представления. ( I800f4 )

Изменения API

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

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

  • Эта библиотека теперь использует аннотации nullness JSpecify , которые являются type-use. Разработчики Kotlin должны использовать следующий аргумент компилятора для обеспечения правильного использования: -Xjspecify-annotations=strict (это значение по умолчанию, начиная с версии 2.1.0 компилятора Kotlin). ( Ie4340 , b/326456246 )
  • Документ 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 )

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

Версия 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 )

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

Версия 2.8.5

4 сентября 2024 г.

Выпущен androidx.lifecycle:lifecycle-*:2.8.5 . Версия 2.8.5 содержит эти коммиты .

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

  • Обновите правила androidx.lifecycle.ReportFragment ProGuard, чтобы разрешить обфускацию. ( ff898e1 )

Внешний вклад

  • Делегат расширения SavedStateHandle.saveable теперь поддерживает значения nullable. Спасибо Роману Калукевичу за вклад. ( 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 теперь содержит API dropUnlessResumed и 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 без ключа теперь является ошибкой, следуя тому же соглашению, что и API DisposableEffect , которому соответствуют эти 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 , или использовали DSL viewModelFactory Kotlin.
  • Использование 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 )

Известные проблемы

Версия 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 . Чтобы учесть это изменение, метод Composable viewModel теперь принимает 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 , или использовали DSL viewModelFactory Kotlin.
  • Использование 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 без ключа теперь является ошибкой, следуя тому же соглашению, что и API DisposableEffect , который отражают эти 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 — если LiveData имеет установленное value , функция map / switchMap будет немедленно вызвана для заполнения value возвращаемого LiveData . Это гарантирует, что начальное значение будет установлено как часть первой композиции (при использовании с observeAsState() ), но не изменяет поведение наблюдения — обновленные значения из исходного LiveData будут по-прежнему применяться только после того, как вы начнете наблюдать LiveData .
  • В этом выпуске исправлена ​​проблема, из-за которой SavedStateHandle не восстанавливал пользовательские классы Parcelable должным образом после смерти и восстановления процесса. Из-за информации о типе, которая теряется фреймворком Android, массивы пользовательских Parcelables требуют дополнительной работы (ручного создания типизированного массива нужного типа), а документация по get , getLiveData и getStateFlow теперь специально указывает на это ограничение.
  • Правила хранения proguard, связанные с LifecycleObserver , были удалены. Это означает, что защищенный proguard код, который хочет использовать 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 для обработки пар событий — started to stopped и resumed to paused соответственно. Этот 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 как Compose State . Это эквивалентно (и является более короткой альтернативой) 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-beta01

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 , b/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 , b/259344129 )

Изменения API

  • Все файлы из модулей lifecycle-livedata-ktx были перемещены в основной модуль lifecycle-livedata . ( I10c6f , b/274800183 )

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

  • Расширения LiveData.map() и LiveData.switchMap() теперь устанавливают value возвращаемой LiveData , если на предыдущих LiveData была установлена ​​значение, обеспечивая, чтобы использование полученного живого в Jetpack Compose имеет правильное состояние на начальном составе. ( I91d2b , b/269479952 )
  • addCloseable() ViewModel () теперь немедленно закрывает Closeable , если ViewModel уже получила вызов onCleared() . ( I4712e , b/280294730 )

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

  • Из жизненного цикла 2.6.2 : Исправлена ​​проблема, в которой SavedStateHandle не будет правильно восстановлен после смерти процесса, если государство было восстановлено, save() был вызван без фактической спасения государства в родительском SavedStateRegistry , а затем государство было снова восстановлено. Это исправляет взаимодействие между rememberSaveable и навигационными NavHost . ( AOSP/2729289 )

Версия 2.7.0-Alpha01

26 июля 2023 г.

androidx.lifecycle:lifecycle-*:2.7.0-alpha01 выпускается. Версия 2.7.0-Alpha01 содержит эти коммиты.

Изменения API

  • Lifecycle.State в настоящее время составляется с помощью Spose-Observable через Lifecycle.currentStateFlow , который возвращает StateFlow , где value является текущим Lifecycle.State . ( IB212D , B/209684871 )
  • Lifecycle.Event S теперь может наблюдать как Flow с Lifecycle.asFlow(). ( IF2C0F , B/176311030 )
  • API LifecycleResumeEffect был добавлен для запуска SideEffect S на основе как на Lifecycle.Event.ON_RESUME , так и на Lifecycle.Event.ON_PAUSE Событие. ( I60386 , B/235529345 )
  • API LifecycleStartEffect был добавлен для запуска SideEffect S на основе Lifecycle.Event.ON_START и Lifecycle.Event.ON_STOP . ( I5a8d1 , b/235529345 )
  • API LifecycleEventEffect был добавлен для запуска Compose SideEffect S на основе Lifecycle.Event . ( IC9794 , B/235529345 )
  • Расширение Lifecycle.collectAsState() было добавлено, чтобы непосредственно выявить Lifecycle.State . State . Это эквивалентно (и более короткая альтернатива) для lifecycle.currentStateFlow.collectAsState() . ( I11015 , B/235529345 )

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

  • Расширение LiveData.distinctUntilChanged() теперь устанавливает value возвращаемого LiveData , если на предыдущих LiveData было установлено значение. Это не изменяет поведение наблюдения - обновленные значения из исходного LiveData все равно будут применяться только после того, как вы начнете наблюдать за LiveData возвращаемой из distinctUntilChanged() . ( IB482F )
  • Правила Proguard Hepe, связанные с LifecycleObserver , были удалены. Это означает, что прогнозированный код, который желает использовать API с помощью отражения, должен будет предоставить свои собственные правила Heat для их конкретного случая использования. ( IA12FD )

Версия 2.6

Версия 2.6.2

6 сентября 2023 г.

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

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

  • Исправлена ​​проблема, в которой SavedStateHandle не будет правильно восстановлен после смерти процесса, если государство было восстановлено, save() был вызван без фактической спасения государства в родительском SavedStateRegistry , а затем государство было снова восстановлено. Это исправляет взаимодействие между rememberSaveable и навигационными NavHost . ( AOSP/2729289 )

Версия 2.6.1

22 марта 2023 г.

androidx.lifecycle:lifecycle-*:2.6.1 выпускается. Версия 2.6.1 содержит эти коммиты.

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

Версия 2.6.0

8 марта 2023 г.

androidx.lifecycle:lifecycle-*:2.6.0 выпускается. Версия 2.6.0 содержит эти коммиты.

Важные изменения с 2.5.0

  • LiveData теперь включает null null новое isInitialized свойство, которое указывает на то, что когда -либо было установлено явное значение на LiveData , что позволяет вам различать liveData.value
  • MediatorLiveData теперь включает в себя конструктор для установки начального значения.
  • Добавлено новое расширение на StateFlow и Flow collectAsStateWithLifecycle() , которые собираются из потоков и представляют его последнее значение в качестве состояния составления в целом в жизненном цикле.
  • Lifecycle.launchWhenX Методы и Lifecycle.whenX методы были устарели, так как использование паузационного диспетчера может привести к потерянным ресурсам в некоторых случаях. Рекомендуется использовать Lifecycle.repeatOnLifecycle . Для получения дополнительной информации о единовременной приостановке работы, пожалуйста, посмотрите это объяснение того, почему это по своей природе небезопасно.
  • Конверсия Kotlin - большое количество классов жизненного цикла было преобразовано в Kotlin. Все преобразованные классы все еще сохраняют свою бинарную совместимость с LifecycleOwner версиями. Следующие классы имеют несовместимые изменения источника для классов ViewModelStoreOwner написанных в Kotlin: ViewTreeLifecycleOwner , LiveDataReactiveStreams , HasDefaultViewModelProviderFactory , ViewTreeViewModelStoreOwner , Transformations

В таблице ниже представлены преобразования источника для новой версии жизненного цикла.

Жизненный цикл 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() принял нулевой тип, вы должны создать экземпляр Observer с нулевым типом.
  • Эти классы также были преобразованы в котлин, но остаются совместимыми с источником: DefaultLifecycleObserver , LifecycleEventObserver , Lifecycle LifecycleService LifecycleRegistry , LifecycleObserver , ViewModelStore , AndroidViewModel ServiceLifecycleDispatcher AbstractSavedStateViewModelFactory 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-BETA01

8 февраля 2023 г.

androidx.lifecycle:lifecycle-*:2.6.0-beta01 выпускается. Версия 2.6.0-beta01 содержит эти коммиты.

Котлин преобразования

  • LifecycleOwner теперь написан в Котлине. Это несовместимое изменение источника для классов, написанных в Kotlin - теперь они должны переопределить свойство lifecycle , а не внедрять предыдущую функцию getLifecycle() . ( I75b4b , b/240298691 )
  • ViewModelStoreOwner сейчас в Котлине. Это несовместимое изменение источника для классов, написанных в Kotlin - теперь они должны переопределить свойство viewModelStore , а не внедрять предыдущую функцию getViewModelStore() . ( I86409 , B/240298691 )
  • Расширение Kotlin на LifecycleOwner , который обеспечивает поле lifecycleScope , было перемещено в артефакт lifecycle-common от lifecycle-runtime-ktx . ( I41d78 , b/240298691 )
  • Расширение Kotlin на Lifecycle , обеспечивающее поле coroutineScope , было перемещено в артефакт lifecycle-common из lifecycle-runtime-ktx . ( IABB91 , B/240298691 )

Версия 2.6.0-Alpha05

25 января 2023 г.

androidx.lifecycle:lifecycle-*:2.6.0-alpha05 выпускается. Версия 2.6.0-Alpha05 содержит эти коммиты.

Котлин преобразования

  • Transformations теперь написаны в Котлине. Это несовместимое изменение источника для тех классов, написанных в котлине, которые непосредственно использовали синтаксис, такой как Transformations.map -Код Kotlin теперь должен использовать синтаксис метода расширения Kotlin, который ранее был доступен только при использовании lifecycle-livedata-ktx . При использовании языка программирования Java версии этих методов, которые принимают метод androidx.arch.core.util.Function , устанавливаются и заменяются версиями, которые принимают Function1 Kotlin1. Это изменение поддерживает бинарную совместимость. ( I8e14f )
  • ViewTreeViewModelStoreOwner теперь написан в Котлине. Это несовместимое изменение источника для тех классов, написанных в Kotlin - теперь вы должны непосредственно импортировать и использовать методы расширения Kotlin в View androidx.lifecycle.setViewTreeViewModelStoreOwner и Androidx.LifeCycle.FindViewTreeViewModelStoreOwner и androidx.lifecycle.findViewTreeViewModelStoreOwner и Androidx.lifecycle.findViewTreeViewModelSotorOwner для SET и FEENT FEER SET SET SET. Это бинарно совместим и остается источником, совместимым с реализациями, написанными на языке программирования Java. ( IA06D8 , IB22D8 , B/240298691 )
  • Интерфейс HasDefaultViewModelProviderFactory теперь записан в Kotlin. Это несовместимое изменение источника для классов, написанных в Kotlin - теперь они должны переопределить свойства defaultViewModelProviderFactory и defaultViewModelCreationExtras , а не реализовывать предыдущие соответствующие функции. ( IAed9c , b/240298691 )
  • Observer сейчас написан в Котлине. Его метод onChanged() теперь использует value имени для своего параметра. ( Iffef2 , i4995e , b/240298691 )
  • AndroidViewModel , AbstractSavedStateViewModelFactory , LifecycleService , ServiceLifecycleDispatcher и ProcessLifecycleOwner теперь написаны в Kotlin ( i2e771 , ibae40 , i160d7, i08884 , i1cda7, b/240298691), I08884, i1cda7, b/240298691), I08884 , i1cda7 , b/240298691 ), i08884, i1cda7, b/240298691).

Версия 2.6.0-Alpha04

11 января 2023 г.

androidx.lifecycle:lifecycle-*:2.6.0-alpha04 выпускается. Версия 2.6.0-Alpha04 содержит эти коммиты.

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

  • LiveData теперь включает null null новое isInitialized свойство, которое указывает на то, что когда -либо было установлено явное значение на LiveData , что позволяет вам различать liveData.value . ( IBD018 )

Изменения API

  • APIS collectAsStateWithLifecycle() lifecycle-runtime-compose больше не в экспериментальном статусе. ( I09D42 , B/258835424 )
  • Lifecycle.launchWhenX Методы и Lifecycle.whenX методы были устарели, так как использование паузационного диспетчера может привести к потерянным ресурсам в некоторых случаях. Рекомендуется использовать Lifecycle.repeatOnLifecycle . ( IAFC54 , B/248302832 )

Котлин преобразования

  • ViewTreeLifecycleOwner теперь написан в Котлине. Это несовместимое изменение источника для тех классов, написанных в Kotlin - теперь вы должны непосредственно импортировать и использовать методы расширения Kotlin в View androidx.lifecycle.setViewTreeLifecycleOwner и androidx.lifecycle.findViewTreeLifecycleOwner для установки и поиска ранее набор владельца. Это заменяет предыдущее расширение Kotlin в lifecycle-runtime-ktx . Это бинарно совместим и остается источником, совместимым с реализациями, написанными на языке программирования Java. ( I8a77a , i5234e , b/240298691 )
  • LiveDataReactiveStreams теперь написан в Котлине. Ранее расширения Kotlin в lifecycle-reactivestreams-ktx были перемещены в модуль lifecycle-reactivestreams и стали основной поверхностью для кода, написанного в котлине. Это несовместимое изменение источника для кода, написанного в Котлине, если вы еще не использовали API метода расширения Kotlin. ( I2b1b9 , i95d22 , b/240298691 )
  • DefaultLifecycleObserver , LifecycleEventObserver , Lifecycle , LifecycleRegistry , LifecycleObserver и ViewModelStore теперь написаны в Kotlin ( IADFFD , ( i60034 , i8c52c , i9593d, i01fe1, i59a23, b/ 2402989898911193d , I01Fe1, I59A23, B/240299898989891, I9593d , I01Fe1, I59A23, B/24029898989898d, i01fe1, i59a23 , b/240298989898 .

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

  • SavedStateHandle больше не сбивается с ClassCastException при вызове get() с неправильным типом класса. ( I6ae7c )

Версия 2.6.0-Alpha03

24 октября 2022 г.

androidx.lifecycle:lifecycle-*:2.6.0-alpha03 . Версия 2.6.0-Alpha03 содержит эти коммиты.

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

  • Исправлена ​​проблема с ограничениями между различными модулями жизненного цикла, которые не работают, как предполагалось. ( I18D0D , B/249686765 )
  • Ошибки, брошенные LifecycleRegistry.moveToState() теперь включают более полезные обмене сообщениями об ошибках, которая информирует разработчиков компонента, вызывающего ошибку. ( IDF4B2 , B/244910446 )

Версия 2.6.0-Alpha02

7 сентября 2022 г.

androidx.lifecycle:lifecycle-*:2.6.0-alpha02 выпускается. Версия 2.6.0-Alpha02 содержит эти коммиты.

Изменения API

  • MediatorLiveData теперь включает в себя конструктор для установки начального значения. ( IB6CC5 , B/151244085 )

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

  • Артефакты Lifecycle теперь включают ограничения , которые гарантируют, что все межзависимые артефакты жизненного цикла используют одну и ту же версию, автоматически обновляя другие зависимости при обновлении. B/242871265
  • FlowLiveData.asFlow() теперь создает callbackFlow , а не использует свою собственную реализацию Channel для обеспечения безопасности потока и сохранения контекста. ( I4a8b2 , b/200596935 )
  • Функция asLiveData FlowLiveData теперь сохранит начальное значение StateFlow при создании нового объекта LiveData . ( I3f530 , b/157380488 )
  • Из жизненного цикла 2.5.1 : пользовательские реализации AndroidViewModelFactory теперь правильно вызывает функцию create(modelClass) при использовании конструктора StateRul с Lifecycle 2.4+ ( I5B315 , B/238011621 )

Версия 2.6.0-Alpha01

29 июня 2022 г.

androidx.lifecycle:lifecycle-*:2.6.0-alpha01 выпускается. Версия 2.6.0-Alpha01 содержит эти коммиты.

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

  • Добавлено новое расширение на StateFlow и Flow collectAsStateWithLifecycle , которые собираются из потоков и представляют его последнее значение в качестве состояния составления в целом в жизненном цикле. Поток собирается, и новая эмиссия устанавливается на значение состояния, когда жизненный цикл, по крайней мере, в определенном Lifecycle.State . Когда жизненный цикл падает ниже того Lifecycle.State . ( I1856E , B/230557927 )

Версия 2.5

Версия 2.5.1

27 июля 2022 г.

androidx.lifecycle:lifecycle-*:2.5.1 выпускается. Версия 2.5.1 содержит эти коммиты.

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

  • Пользовательские реализации AndroidViewModelFactory теперь правильно вызовут функцию create(modelClass) при использовании конструктора AndroidViewModelFactory с AndroidViewModelfActory с Lifecycle 2.4+. ( I5b315 , b/238011621 )

Версия 2.5.0

29 июня 2022 г.

androidx.lifecycle:lifecycle-*:2.5.0 выпускается. Версия 2.5.0 содержит эти коммиты.

Важные изменения с 2.4.0

  • SavedStateHandle теперь предлагает API getStateFlow() , который возвращает Kotlin StateFlow для мониторинга изменений стоимости в качестве альтернативы использованию 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 с точки зрения одного или нескольких инициализаторов Lambda, один для каждого конкретного класса 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 теперь предлагает API viewModel() , который занимает фабрику Lambda для создания экземпляра 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 Integration -Артефакт lifecycle-viewmodel-compose теперь содержит новые экспериментальные API в SavedStateHandle.saveable , который позволяет rememberSaveable как поведение, поддерживаемое SavedStateHandle of `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 больше не будет сбои при смешивании предыдущих версий зависимостей для жизненного цикла компонента с версиями 2.5+. ( I81a66 , b/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-бета01 содержит эти коммиты.

Изменения API

  • Добавлены делегаты SavedStateHandle.saveable Property для использования имен свойств в качестве ключей для постоянного состояния в SavedStateHandle ( I8BB86 , B/225014345 )

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

  • Исправлена ​​проблема, в которой гнездовывание одного NavHost в другом NavHost на неприимкой вкладке нижней навигации приведет к IllegalStateException при использовании нескольких стеков задних. ( I11bd5 , b/228865698 )

Версия 2.5.0-Alpha06

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 , b/215406268 )

Версия 2.5.0-Alpha05

23 марта 2022 г.

androidx.lifecycle:lifecycle-*:2.5.0-alpha05 выпускается. Версия 2.5.0-Alpha05 содержит эти коммиты.

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

  • Модуль lifecycle-viewmodel-compose теперь предоставляет SavedStateHandleSaver , экспериментальный API, который обеспечивает значения в SavedStateHandle , правильно интегрированы с тем же сохраненным состоянием экземпляра, которое rememberSaveable применение. ( IA88B7 , B/195689777 )

Изменения API

  • Исправлена ​​проблема совместимости с жизненным циклом 2.3 и более новыми версиями жизненного цикла в Java. ( I52c8a , b/219545060 )

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

  • SavedStateViewFactory теперь поддерживает использование CreationExtras , даже если он был инициализирован с помощью SavedStateRegistryOwner . Если предоставляются дополнения, инициализированные аргументы игнорируются. ( I6c43b , b/224844583 )

Версия 2.5.0-Alpha04

9 марта 2022 г.

androidx.lifecycle:lifecycle-*:2.5.0-alpha04 . Версия 2.5.0-Alpha04 содержит эти коммиты.

Изменения API

  • SavedStateHandle теперь предлагает API getStateFlow() , который возвращает Kotlin StateFlow для мониторинга изменений стоимости в качестве альтернативы использованию LiveData . ( IAD3AB , B/178037961 )

Версия 2.5.0-Alpha03

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 , b/216687549 )
  • lifecycle-viewmodel-compose теперь предлагает API viewModel() , который занимает фабрику Lambda для создания экземпляра ViewModel , не требуя создания пользовательского ViewModelProvider.Factory . ( I97FBB , B/216688927 )

Изменения API

  • Теперь вы можете создать ViewModel с CreationExtras через lifecycle-viewmodel-compose . ( I08887 , B/216688927 )

Поведение изменяется

  • Попытка переместить Lifecycle.State Государство от INITIALIZED в DESTROYED , теперь всегда бросает IllegalStateException статей, независимо от того, имеет ли Lifecycle прикрепленный наблюдатель. ( I7C390 , B/177924329 )
  • LifecycleRegistry теперь очистит своих наблюдателей, когда они достигнут DESTROYED состояния. ( I4f8dd , b/142925860 )

Версия 2.5.0-Alpha02

9 февраля 2022 года

androidx.lifecycle:lifecycle-*:2.5.0-alpha02 выпускается. Версия 2.5.0-Alpha02 содержит эти коммиты.

Изменения API

  • SavedStateHandle и SavedStateViewModelFactory были преобразованы в Котлин. Это улучшило нулясь дженериков в обоих классах. ( IB6CE2 , B/216168263 , I9647A , B/177667711 )
  • Параметр функции switchMap LiveData теперь может иметь нулевой выход. ( I40396 , B/132923666 )
  • Расширения LiveData -Ktx теперь аннотируются @CheckResult чтобы обеспечить соблюдение того, что результат используется при вызове этих функций. ( IA0F05 , B/207325134 )

Поведение изменяется

  • SavedStateHandle теперь правильно хранит defaultValue, когда нет значения для указанного ключа. ( I1c6ce , b/178510877 )

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

  • От жизненного цикла 2.4.1 : обновленный lifecycle-process , чтобы зависеть от запуска 1.1.1 , чтобы гарантировать, что исправления, которые предотвращают ProcessLifecycleInitializer от выброса StartupException доступны по умолчанию. ( IB01DF , B/216490724 )
  • Теперь существует улучшенное сообщение об ошибке, когда пользовательские классы AndroidViewModel имеют параметры в неправильном порядке и пытаются создать ViewModel . ( I340f7 , b/177667711 )
  • Теперь вы можете создать модель представления через CreationExtras , используя AndroidViewModelFactory без установки приложения. ( I6ebef , b/217271656 )

Версия 2.5.0-Alpha01

26 января 2022 г.

androidx.lifecycle:lifecycle-*:2.5.0-alpha01 . Версия 2.5.0-Alpha01 содержит эти коммиты.

ViewModel CreationExtras

С помощью этого выпуска мы закладываем основу для реструктуризации, как строится ViewModel . Вместо жесткого набора подклассов ViewModelProvider.Factory , каждый из которых добавляет дополнительную функциональность (позволяя параметру конструктора Application через AndroidViewModelFactory , позволяя параметр конструктора SavedStateHandle через SavedStateViewModelFactory CreationExtras AbstractSavedStateViewModelFactory , мы перемещаем концепции в мире. ( IA7343 , B/188691010 , B/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 Hounder, который используется для построения этой ViewModel.
  • SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY предоставляет доступ к ViewModelStoreOwner , который используется для построения этой ViewModel.
  • SavedStateHandleSupport.DEFAULT_ARGS_KEY предоставляет доступ к Bundle аргументов, которые следует использовать для построения SavedStateHandle .

Эти дополнения предоставляются по умолчанию при использовании активности 1.5.0-alpha01 , фрагмент 1.5.0-alpha01 и навигация 2.5.0-alpha01 . Если вы используете более раннюю версию этих библиотек, ваши CreationExtras будут пусты - все существующие подклассы ViewModelProvider.Factory были переписаны, чтобы поддержать как устаревший путь создания, используемый более ранними версиями этих библиотек, так и пути CreationExtras , который будет использоваться в будущем.

Эти CreationExtras позволяют вам построить ViewModelProvider.Factory , который передает только информацию, необходимую для каждой ViewModel , не полагаясь на строгую иерархию заводских подклассов:

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
    }
}

Мы используем функцию расширения createSavedStateHandle() на CreationExtras от SavedStateHandleSupport , чтобы построить SavedStateHandle только для одной ViewModel, которая нуждается в этом. ( IA6654 , B/188541057 )

Пользовательские CreationExtras могут быть предоставлены, переопределяя getDefaultViewModelCreationExtras() в вашей ComponentActivity или Fragment , что делает их доступными для вашего пользовательского ViewModelProvider.Factory в качестве встроенной формы вспомогательной инъекции. Эти дополнения будут автоматически доступны для вашей пользовательской заводской завод при непосредственном использовании с ViewModelProvider или при использовании by viewModels() и by activityViewModels() расширения свойств Kotlin. ( I79f2b , b/207012584 , b/207012585 , b/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 1.1.1 , который установил регрессию в том случае, где использование ProcessLifecycleInitializer может привести к StartupException . ( B/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() Composable и LocalViewModelStoreOwner .
    • Изменение источника : ViewModelProvider был переписан в Котлин. ViewModelProvider.Factory.create Метод больше не допускает общий общий.
  • Новые API Coroutines были добавлены в androidx.lifecycle:lifecycle-runtime-ktx :
  • Lifecycle.repeatOnLifecycle , API, который выполняет блок кода в коратике, когда жизненный цикл, по крайней мере, в определенном состоянии. Блок отменит и повторно запускается, когда жизненный цикл движется в целевом состоянии и выходит из целевого состояния;
  • Flow.flowWithLifecycle , API, который излучает значения из восходящего потока, когда жизненный цикл, по крайней мере, в определенном состоянии.
  • DefaultLifecycleObserver был перемещен из lifecycle.lifecycle-common-java8 в lifecycle.lifecycle-common . lifecycle.lifecycle-common lifecycle.lifecycle-common-java8 больше не предоставляет никаких дополнительных функциональных возможностей на вершине lifecycle.lifecycle-common .
  • Non Coroutines 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 выпускается без изменений из жизненного цикла 2.4.0-бета01. Версия 2.4.0-RC01 содержит эти коммиты.

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

15 сентября 2021 г.

androidx.lifecycle:lifecycle-*:2.4.0-beta01 выпускается. Версия 2.4.0-бета01 содержит эти коммиты.

Изменения 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 )
  • Non Coroutines API из lifecycle-viewmodel-ktx были перемещены в модуль lifecycle-viewmodel . ( I6d5b2 )

Внешний вклад

  • Спасибо Dmitrilc за исправление типа в документации ViewModel ! ( #221 )

Версия 2.4.0-Alpha03

4 августа 2021 года

androidx.lifecycle:lifecycle-*:2.4.0-alpha03 выпущен. Версия 2.4.0-Alpha03 содержит эти коммиты.

Изменения API

  • Изменение источника : ViewModelProvider был переписан в Котлин. ViewModelProvider.Factory.create Метод больше не допускает общий общий. ( I9b9f6 )

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

  • Lifecycle.repeatOnLifecycle : block теперь всегда используется последовательно при повторении выполнения. ( IBAB33 )

Внешний вклад

  • Спасибо Chao2zhang за исправление фрагментов кода в документации repeatOnLifecycle . #205 .

Версия 2.4.0-Alpha02

16 июня 2021 г.

androidx.lifecycle:lifecycle-*:2.4.0-alpha02 выпускается. Версия 2.4.0-Alpha02 содержит эти коммиты.

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

  • Добавлена ​​новая проверка Lint RepeatOnLifecycleWrongUsage в lifecycle-runtime-ktx , который обнаруживает, когда repeateOnLifecycle неправильно используется в onStart() или onResume() . ( 706078 , b/187887400 )

Изменения API

  • API LifecycleOwner.addRepeatingJob удаляется в пользу Lifecycle.repeatOnLifecycle . ( I4a3a8 )
  • Сделайте ProcessLifecycleInitializer Public, чтобы другой androidx.startup.Initializer S может использовать их в качестве зависимостей. ( I94C31 )

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

  • Исправлена ​​проблема с проверкой LINT NullSafeMutableLiveData , когда в поле есть модификаторы. ( #147 , b/183696616 )
  • Исправлена ​​еще одна проблема с проверкой Lint NullSafeMutableLiveData Lint при использовании дженериков. ( #161 , b/184830263 )

Внешний вклад

Версия 2.4.0-Alpha01

24 марта 2021 г.

androidx.lifecycle:lifecycle-*:2.4.0-alpha01 выпускается. Версия 2.4.0-Alpha01 содержит эти коммиты.

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

  • 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>
    

Изменения API

  • Добавлен API Flow.flowWithLifecycle , который излучает значения из потока вверх по течению, когда жизненный цикл, по крайней мере, в определенном состоянии с использованием API Lifecycle.repeatOnLifecycle . Это альтернатива также новой LifecycleOwner.addRepeatinJob API. ( I0f4cd )

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

  • Из жизненного цикла 2.3.1 : правило Lint NonNullableMutableLiveData теперь может правильно различаться между полевыми переменными с различной нулямицией. ( B/169249668 )

Жизненный цикл ViewModel Compose Version 1.0.0

Версия 1.0.0-Alpha07

16 июня 2021 г.

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07 . Версия 1.0.0-Alpha07 содержит эти коммиты.

Нарушение изменений API

  • viewModel() теперь принимает дополнительную ViewModelStoreOwner , что облегчает работу с владельцами, отличными от LocalViewModelStoreOwner . Например, теперь вы можете использовать viewModel(navBackStackEntry) чтобы получить ViewModel, связанную с конкретным навигационным графиком. ( I2628d , B/188693123 )

Версия 1.0.0-Alpha06

2 июня 2021 г.

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06 . Версия 1.0.0-Alpha06 содержит эти коммиты.

Обновлено, чтобы быть совместимым с Compose Version 1.0.0-beta08 .

Версия 1.0.0-Alpha05

18 мая 2021 г.

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05 . Версия 1.0.0-Alpha05 содержит эти коммиты.

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

  • Обновлено, чтобы быть совместимым с Compose Version 1.0.0-beta07 .

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

  • Файлы AndroidManifest из UI-test-Manifest и UI-Tooling-Data в настоящее время совместимы с Android 12 ( i6f9de , b/184718994 )

Версия 1.0.0-Alpha04

7 апреля 2021 г.

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04 . Версия 1.0.0-Alpha04 содержит эти коммиты.

Изменения зависимости

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 nullable ViewModelStoreOwner to better determine whether a ViewModelStoreOwner is available in the current composition. APIs that require a ViewModelStoreOwner , such as viewModel() and NavHost , still throw an exception if a ViewModelStoreOwner 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 a provides functions that can be used with CompositionLocalProvider , replacing the asProvidableCompositionLocal() 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 and LocalViewModelStoreOwner were moved from androidx.compose.ui.viewinterop to this artifact in the androidx.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 call setSavedStateProvider() for a given key, providing a SavedStateProvider that will get a callback to saveState() when the SavedStateHandle 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. For LifecycleRegistry objects that owned by your own components, you can explicitly opt out from checks by using LifecycleRegistry.createUnsafe(...) , but then you have to ensure that a proper synchronization is in place when this LifecycleRegistry is accessed from different threads.
  • Lifecycle State and Event Helpers : Added static helper methods of downFrom(State) , downTo(State) , upFrom(State) , upTo(State) to Lifecycle.Event for generating the Event given a State and transition direction. Added the getTargetState() method that provides the State that the Lifecycle will transition to directly following the Event .
  • withStateAtLeast : 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 existing when* methods as they do not permit running suspending code and do not employ a custom dispatcher. ( aosp/1326081 )
  • ViewTree APIs : A new ViewTreeLifecycleOwner.get(View) and ViewTreeViewModelStoreOwner.get(View) API allows you to retrieve the containing LifecycleOwner and ViewModelStoreOwner , respectively, given a View instance. You must upgrade to Activity 1.2.0 and Fragment 1.3.0 , and AppCompat 1.3.0-alpha01 or higher to populate this correctly. The findViewTreeLifecycleOwner and findViewTreeViewModelStoreOwner Kotlin extensions are available in lifecycle-runtime-ktx and lifecycle-viewmodel-ktx , respectively.
  • LiveData.observe() Kotlin extension deprecation : The LiveData.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 of SavedStateHandle is now consistent before and after the state is saved - it now includes keys previously used with setSavedStateProvider() in addition to the keys used with set() and getLiveData() . ( aosp/1517919 , b/174713653 )

External Contribution

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 )

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

Documentation Changes

  • The liveData builder and asLiveData() docs have been updated to include details about changing the given timeout values. ( aosp/1122324 )

Version 2.3.0-alpha07

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

July 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) to Lifecycle.Event for generating the Event given a State and transition direction. Added the getTargetState() method that provides the State that the Lifecycle will transition to directly following the Event . ( 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 existing when* 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. For LifecycleRegistry objects that owned by your own components, you can explicitly opt out from checks by using LifecycleRegistry.createUnsafe(...) , but then you have to ensure that a proper synchronization is in place when this LifecycleRegistry is accessed from different threads ( Ie7280 , b/137392809 )

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

  • Fixed a crash in NullSafeMutableLiveData . ( b/159987480 )
  • Fixed an ObsoleteLintCustomCheck for Lint checks bundled with lifecycle-livedata-core-ktx (and specifically NullSafeMutableLiveData ). ( 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 to onActive() or onInactive() . ( 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

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 a null value was set on a MutableLiveData 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 call setSavedStateProvider() for a given key, providing a SavedStateProvider that will get a callback to saveState() when the SavedStateHandle is asked to save its state. ( b/155106862 )
  • A new ViewTreeViewModelStoreOwner.get(View) API allows you to retrieve the containing ViewModelStoreOwner given a View instance. You must upgrade to Activity 1.2.0-alpha05 , Fragment 1.3.0-alpha05 , and AppCompat 1.3.0-alpha01 to populate this correctly. A findViewModelStoreOwner() Kotlin extension has been added to lifecycle-viewmodel-ktx . ( aosp/1295522 )

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

  • Fixed an issue that caused the MutableLiveData Lint checks released in Lifecycle 2.3.0-alpha01 from being published alongside the lifecycle-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 null Application to its constructor to better support cases where one is not readily available and support for AndroidViewModel 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

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 containing LifecycleOwner given a View instance. You must upgrade to Activity 1.2.0-alpha01 and Fragment 1.3.0-alpha01 to populate this correctly. A findViewTreeLifecycleOwner Kotlin extension is available in lifecycle-runtime-ktx . ( aosp/1182361 , aosp/1182956 )
  • Added a new Lint check that warns you when setting a null value on a MutableLiveData that has been defined in Kotlin as non-null. This is available when using the livedata-core-ktx or livedata-ktx artifacts. ( aosp/1154723 , aosp/1159092 )
  • A new lifecycle-runtime-testing artifact is available that provides a TestLifecycleOwner that implements LifecycleOwner and provides a thread safe mutable Lifecycle . ( 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. The lifecycle-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 a Fragment or FragmentActivity to the new ViewModelProvider(ViewModelStoreOwner) constructor to achieve the same functionality when using Fragment 1.2.0 .
  • lifecycle-extensions Artifact Deprecation : With the above deprecation of ViewModelProviders.of() , this release marks the deprecation of the last API in lifecycle-extensions and this artifact should now be considered deprecated in its entirety. We strongly recommend depending on the specific Lifecycle artifacts you need (such as lifecycle-service if you're using LifecycleService and lifecycle-process if you're using ProcessLifecycleOwner ) rather than lifecycle-extensions as there will not be a future 2.3.0 release of lifecycle-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 use LifecycleEventObserver .

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 in ViewModelStore and queried later with default factory.
  • Fix a usage of Dispatchers.Main.immediate in launchWhenCreated and similar methods to be called synchronously during corresponding lifecycle event. ( aosp/1156203 )

External contributions

  • 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 of Dispatchers.Main instead of Dispatchers.Main.immediate . ( aosp/1145596 )

External contributions

  • Thanks to Nicklas Ansman for contributing the fix! ( aosp/1145596 )

Version 2.2.0-beta01

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's LifecycleOwner moving to started and resumed on Android 10 devices. ( aosp/1128132 )
  • Fixed a regression introduced in Lifecycle 2.2.0-alpha05 which would cause a NullPointerException when using version 2.0.0 or 2.1.0 of lifecycle-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

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 of liveData now use Dispatchers.Main.immediate instead of Dispatchers.Main . ( b/139740492 )

External contributions

  • Thanks to Nicklas Ansman for contributing the move to Dispatchers.Main.immediate ! ( aosp/1106073 )

Version 2.2.0-alpha03

7 августа 2019 г.

androidx.lifecycle:lifecycle-*:2.2.0-alpha03 is released. The commits included in this version can be found here .

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

API changes

  • ViewModelProviders.of() has been deprecated. You can pass a Fragment or FragmentActivity to the new ViewModelProvider(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 changes

  • Replaced LiveDataScope.initialValue with LiveDataScope.latestValue which will track the current emitted value of the liveData block.
  • Added a new overload to the liveData builder that receives timeout parameter as type Duration

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 of ViewModel class and factories provided by default by Fragments and AppCompatActivity will inject SavedStateHandle automatically.
  • AbstractSavedStateViewModelFactory was added. It allows you to create custom factories for your ViewModel and provide them access to SavedStateHandle .

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

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 an IllegalStateException . ( b/139093676 )
  • Fixed an IllegalStateException when using AbstractSavedStateViewModelFactory . ( 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 changes

  • SavedStateViewModelFactory no longer extends AbstractSavedStateViewModelFactory and SavedStateHandle is created only for ViewModels that requested have it ( aosp/1113593 )

ViewModel-SavedState Version 1.0.0-alpha03

7 августа 2019 г.

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03 is released. The commits included in this version can be found here .

Критические изменения

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 to SavedStateViewModelFactory .
  • AbstractSavedStateVMFactory is renamed to AbstractSavedStateViewModelFactory .

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 factory SavedStateVMFactory and your ViewModel should have a constructor that receives SavedStateHandle 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 hidden GenericLifecycleObserver class.
  • Added ktx extensions for LiveData.observe methods and Transformations.* methods.
  • Added Transformations.distinctUntilChanged , which creates a new LiveData object that does not emit a value until the source LiveData value has been changed.
  • Added coroutine support in ViewModels by adding the extension property ViewModel.viewModelScope .

Версия 2.1.0

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 changes

  • Breaking change: the underlying API behind by viewModels() and by activityViewModels() has been changed to support a ViewModelStore directly, rather than only a ViewModelStoreOwner . ( 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 changes

  • ViewModelProvider.KeyedFactory was removed. Second interface in addition to ViewModelProvider.Factory didn't compose well with new features as property delegation in Kotlin by viewmodels {} . ( aosp/914133 )

Version 2.1.0-alpha02

30 января 2019 г.

androidx.lifecycle 2.1.0-alpha02 is released.

API changes

  • LifecycleRegistry now contains a setCurrentState() method that replaces the now deprecated setState() method. ( aosp/880715 )

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

  • Fixed an issue where mock ViewModel instances would crash when the containing ViewModelStore 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 hidden GenericLifecycleObserver class.
  • Added ktx extensions for LiveData.observe methods and Transformations.* methods.
  • Method Transformations.distinctUntilChanged was added. It creates a new LiveData 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 receives key and Class in create method.

Версия 2.0.0

Версия 2.0.0

September 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

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 and LifecycleFragment have now been removed - please use FragmentActivity , AppCompatActivity or support Fragment .
  • @NonNull annotations have been added to ViewModelProviders and ViewModelStores
  • ViewModelProviders constructor has been deprecated - please use its static methods directly
  • ViewModelProviders.DefaultFactory has been deprecated - please use ViewModelProvider.AndroidViewModelFactory
  • The static ViewModelProvider.AndroidViewModelFactory.getInstance(Application) method has been added to retrieve a static Factory suitable for creating ViewModel and AndroidViewModel instances.