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

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

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

Артефакт Стабильный релиз Кандидат на релиз Бета-версия Альфа-релиз
жизненный цикл-* 2.9.3 - - 2.10.0-альфа03
жизненный цикл-представление-модель-навигация3 - - - 2.10.0-альфа03
Последнее обновление этой библиотеки: 27 августа 2025 г.

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

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

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

Котлин

Круто

    dependencies {
        def lifecycle_version = "2.9.3"
        def arch_version = "2.2.0"

        // ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
        // ViewModel utilities for Compose
        implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version"
        // LiveData
        implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
        // Lifecycles only (without ViewModel or LiveData)
        implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"
        // Lifecycle utilities for Compose
        implementation "androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version"

        // Saved state module for ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version"

        // ViewModel integration with Navigation3
        implementation "androidx.lifecycle:lifecycle-viewmodel-navigation3:2.10.0-alpha03"

        // Annotation processor
        kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version"

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version"

        // optional - ReactiveStreams support for LiveData
        implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version"

        // optional - Test helpers for LiveData
        testImplementation "androidx.arch.core:core-testing:$arch_version"

        // optional - Test helpers for Lifecycle runtime
        testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version"
    }
    

Котлин

    dependencies {
        val lifecycle_version = "2.9.3"
        val arch_version = "2.2.0"

        // ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version")
        // ViewModel utilities for Compose
        implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version")
        // LiveData
        implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version")
        // Lifecycles only (without ViewModel or LiveData)
        implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version")
        // Lifecycle utilities for Compose
        implementation("androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version")

        // Saved state module for ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version")

        // ViewModel integration with Navigation3
        implementation("androidx.lifecycle:lifecycle-viewmodel-navigation3:2.10.0-alpha03")

        // Annotation processor
        kapt("androidx.lifecycle:lifecycle-compiler:$lifecycle_version")
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version")

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version")

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version")

        // optional - ReactiveStreams support for LiveData
        implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version")

        // optional - Test helpers for LiveData
        testImplementation("androidx.arch.core:core-testing:$arch_version")

        // optional - Test helpers for Lifecycle runtime
        testImplementation ("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version")
    }
    

Ява

Круто

    dependencies {
        def lifecycle_version = "2.9.3"
        def arch_version = "2.2.0"

        // ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
        // LiveData
        implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
        // Lifecycles only (without ViewModel or LiveData)
        implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version"

        // Saved state module for ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version"

        // Annotation processor
        annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version"

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version"

        // optional - ReactiveStreams support for LiveData
        implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version"

        // optional - Test helpers for LiveData
        testImplementation "androidx.arch.core:core-testing:$arch_version"

        // optional - Test helpers for Lifecycle runtime
        testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version"
    }
    

Котлин

    dependencies {
        val lifecycle_version = "2.9.3"
        val arch_version = "2.2.0"

        // ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version")
        // LiveData
        implementation("androidx.lifecycle:lifecycle-livedata:$lifecycle_version")
        // Lifecycles only (without ViewModel or LiveData)
        implementation("androidx.lifecycle:lifecycle-runtime:$lifecycle_version")

        // Saved state module for ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version")

        // Annotation processor
        annotationProcessor("androidx.lifecycle:lifecycle-compiler:$lifecycle_version")
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version")

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version")

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version")

        // optional - ReactiveStreams support for LiveData
        implementation("androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version")

        // optional - Test helpers for LiveData
        testImplementation("androidx.arch.core:core-testing:$arch_version")

        // optional - Test helpers for Lifecycle runtime
        testImplementation("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version")
    }
    
,

Котлин

Круто

    dependencies {
        def lifecycle_version = "2.9.3"
        def arch_version = "2.2.0"

        // ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
        // ViewModel utilities for Compose
        implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version"
        // LiveData
        implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
        // Lifecycles only (without ViewModel or LiveData)
        implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"
        // Lifecycle utilities for Compose
        implementation "androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version"

        // Saved state module for ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version"

        // ViewModel integration with Navigation3
        implementation "androidx.lifecycle:lifecycle-viewmodel-navigation3:2.10.0-alpha03"

        // Annotation processor
        kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version"

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version"

        // optional - ReactiveStreams support for LiveData
        implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version"

        // optional - Test helpers for LiveData
        testImplementation "androidx.arch.core:core-testing:$arch_version"

        // optional - Test helpers for Lifecycle runtime
        testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version"
    }
    

Котлин

    dependencies {
        val lifecycle_version = "2.9.3"
        val arch_version = "2.2.0"

        // ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version")
        // ViewModel utilities for Compose
        implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version")
        // LiveData
        implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version")
        // Lifecycles only (without ViewModel or LiveData)
        implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version")
        // Lifecycle utilities for Compose
        implementation("androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version")

        // Saved state module for ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version")

        // ViewModel integration with Navigation3
        implementation("androidx.lifecycle:lifecycle-viewmodel-navigation3:2.10.0-alpha03")

        // Annotation processor
        kapt("androidx.lifecycle:lifecycle-compiler:$lifecycle_version")
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version")

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version")

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version")

        // optional - ReactiveStreams support for LiveData
        implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version")

        // optional - Test helpers for LiveData
        testImplementation("androidx.arch.core:core-testing:$arch_version")

        // optional - Test helpers for Lifecycle runtime
        testImplementation ("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version")
    }
    

Ява

Круто

    dependencies {
        def lifecycle_version = "2.9.3"
        def arch_version = "2.2.0"

        // ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
        // LiveData
        implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
        // Lifecycles only (without ViewModel or LiveData)
        implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version"

        // Saved state module for ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version"

        // Annotation processor
        annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version"

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version"

        // optional - ReactiveStreams support for LiveData
        implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version"

        // optional - Test helpers for LiveData
        testImplementation "androidx.arch.core:core-testing:$arch_version"

        // optional - Test helpers for Lifecycle runtime
        testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version"
    }
    

Котлин

    dependencies {
        val lifecycle_version = "2.9.3"
        val arch_version = "2.2.0"

        // ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version")
        // LiveData
        implementation("androidx.lifecycle:lifecycle-livedata:$lifecycle_version")
        // Lifecycles only (without ViewModel or LiveData)
        implementation("androidx.lifecycle:lifecycle-runtime:$lifecycle_version")

        // Saved state module for ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version")

        // Annotation processor
        annotationProcessor("androidx.lifecycle:lifecycle-compiler:$lifecycle_version")
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version")

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version")

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version")

        // optional - ReactiveStreams support for LiveData
        implementation("androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version")

        // optional - Test helpers for LiveData
        testImplementation("androidx.arch.core:core-testing:$arch_version")

        // optional - Test helpers for Lifecycle runtime
        testImplementation("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version")
    }
    

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

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

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

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

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

Lifecycle ViewModel Navigation3 Версия 1.0.0

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

30 июля 2025 г.

Выпущены androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha04 и androidx.lifecycle:lifecycle-viewmodel-navigation3-android:1.0.0-alpha04 . Версия 1.0.0-alpha04 содержит эти коммиты .

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

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

2 июля 2025 г.

Выпущены androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha03 и androidx.lifecycle:lifecycle-viewmodel-navigation3-android:1.0.0-alpha03 . Версия 1.0.0-alpha03 содержит эти коммиты .

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

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

18 июня 2025 г.

Выпущены androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha02 и androidx.lifecycle:lifecycle-viewmodel-navigation3-android:1.0.0-alpha02 . Версия 1.0.0-alpha02 содержит эти коммиты .

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

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

23 мая 2025 г.

Выпущена androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha01 . Версия 1.0.0-alpha01 содержит следующие коммиты .

Новые функции

  • Lifecycle ViewModel Navigation3 — это новая библиотека, созданная вместе с Navigation3 для интеграции с ViewModels . Артефакт androidx.lifecycle:lifecycle-viewmodel-navigation3 предоставляет ViewModelStoreNavEntryDecorator , который предоставляет уникальный объект ViewModelStoreOwner для содержимого каждого элемента NavEntry . Он также предоставляет метод rememberViewModelStoreNavEntryDecorator() , гарантирующий корректную обработку декоратора при изменении конфигурации.
val viewModelDecorator = rememberViewModelStoreNavEntryDecorator()

NavDisplay(
  ,
  entryDecorators =
  listOf(
    rememberSceneSetupNavEntryDecorator(),
    rememberSavedStateNavEntryDecorator(),
    viewModelDecorator
  )
)

Версия 2.10

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

27 августа 2025 г.

Выпущен androidx.lifecycle:lifecycle-*:2.10.0-alpha03 . Версия 2.10.0-alpha03 содержит следующие коммиты .

Изменения API

  • Обновите Compose до версии 1.9.0. ( I2b9de )

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

13 августа 2025 г.

Выпущен androidx.lifecycle:lifecycle-*:2.10.0-alpha02 . Версия 2.10.0-alpha02 содержит следующие коммиты .

Новые функции

  • Композируемый объект LifecycleOwner теперь может создавать автономный корневой жизненный цикл . Если (явно) задать parent = null , новый жизненный цикл будет работать независимо от любого хоста (например, Activity , Fragment или NavBackStackEntry ). Он запускается сразу после попадания композируемого объекта в композицию и автоматически уничтожается при выходе из неё. ( I8dfbe , b/433659048 )

    @Composable
    fun IndependentComponent() {
        // Create a standalone lifecycle, not tied to the parent Activity/Fragment.
        LifecycleOwner(parent = null) {
            val rootLifecycle = LocalLifecycleOwner.current.lifecycle
        }
    }
    

Изменения API

  • В компонуемом объекте LifecycleOwner параметр parentLifecycleOwner был переименован в parent . ( I080bc )

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

  • Компонуемый объект LifecycleOwner теперь корректно переводит свой жизненный цикл в DESTROYED при уничтожении. Это предотвращает потенциальные утечки внешнего кода, содержащего ссылку на жизненный цикл. ( I9e5b7 , b/433659048 )
  • Перемещение minSdk по умолчанию из API 21 в API 23 ( Ibdfca , b/380448311 , b/435705964 , b/435705223 )

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

  • Удалить ненужные внутренние поля из LifecycleOwner . Спасибо Джейку Уортону за вклад. ( Ideddb )

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

30 июля 2025 г.

Выпущен androidx.lifecycle:lifecycle-*:2.10.0-alpha01 . Версия 2.10.0-alpha01 содержит следующие коммиты .

Новые функции

  • Добавьте компонуемый объект LifecycleOwner , чтобы можно было создавать жизненные циклы с ограниченной областью действия непосредственно в пользовательском интерфейсе. Это полезно для компонентов, которым необходимо независимо управлять своими жизненными циклами. Пример интеграции этого нового компонуемого объекта в Navigation3 см. в aosp/3708610 . ( 76cbf7 )

    @Composable
    fun MyComposable() {
        LifecycleOwner(
            maxLifecycle = RESUMED,
            parentLifecycleOwner = LocalLifecycleOwner.current,
        ) {
            val childLifecycleOwner = LocalLifecycleOwner.current
        }
    }
    

Изменения API

  • Добавить функцию фабрики построителей для CreationExtras , обеспечивая более удобный и идиоматический API Kotlin. ( Iab2bd )
  • Добавить встроенную поддержку типов, допускающих значение NULL, в SavedStateHandle.saved , упрощая сохранение и восстановление свойств, допускающих значение NULL. ( I54d69 , b/421325690 )
  • Пометить конструкторы SavedStateHandle как @VisibleForTesting . ( Iff0e0 , b/408002794 )

Версия 2.9

Версия 2.9.3

27 августа 2025 г.

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

Новые функции

  • Добавлены новые цели Kotlin Multiplatform (KMP) в артефакты Lifecycle *-compose . Lifecycle теперь поддерживает следующие платформы: JVM (Android и десктоп), Native (Linux, iOS, watchOS, macOS, MinGW) и Web (JavaScript, WasmJS). ( I0a0e4 )

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

  • Обновление androidx.annotation до версии 1.9.1 ( Ic9e4f , b/397701294 )

Версия 2.9.2

16 июля 2025 г.

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

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

  • Добавлены новые цели Kotlin Multiplatform (KMP) в артефакты Lifecycle. Lifecycle теперь поддерживает следующие платформы: JVM (Android и десктоп), Native (Linux, iOS, watchOS, macOS, MinGW) и Web (JavaScript, WasmJS). Обратите внимание, что в артефакты *-compose новые цели KMP не добавлены, так как это зависит от стабильной версии Compose 1.9 ( I01cb8 ).

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

Версия 2.9.1

4 июня 2025 г.

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

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

  • Исправлена ​​ошибка, из-за SavedStateHandle.remove(key) не очищал состояния SavedStateHandle.getMutableStateFlow(key) . ( d5f939 , b/418746333 )

Версия 2.9.0

7 мая 2025 г.

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

Важные изменения по сравнению с версией 2.8.0

  • Доступен новый артефакт KMP androidx.lifecycle:lifecycle-viewmodel-testing , который предоставляет класс ViewModelScenario для тестирования ViewModels в изоляции с поддержкой onCleared и SavedStateHandle , а также тестирование завершения и восстановления процесса с помощью recreate() .
  • Добавьте getMutableStateFlow к SavedStateHandle , чтобы возвращать MutableStateFlow . Эта новая функция является ключевой и не может использоваться с getLiveData . При попытке использовать обе функции для доступа к одному и тому же состоянию будет выдано исключение.
  • CreationExtras теперь включает перегрузки операторов, подобных картам, для идиоматической манипуляции содержимым в Kotlin. Это позволяет использовать in , += и + с CreationExtras .

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

  • Благодаря поддержке сериализации KotlinX, добавленной в SavedState 1.3.0 , мы добавили ленивый делегат свойств saved , который упрощает сохранение классов @Serializable в SavedStateHandle и позволяет автоматически восстанавливать эти классы при завершении и восстановлении процесса. Обратите внимание, что saved делегат является ленивым и не будет вызывать лямбда-функцию init и сохранять данные в SavedStateHandle до тех пор, пока к нему не будет выполнено обращение.

    @Serializable
    data class Person(val firstName: String, val lastName: String)
    
    class MyViewModel(handle: SavedStateHandle) : ViewModel() {
        var person by handle.saved { Person("John", "Doe") }
    
        fun onPersonChanged(person: Person) {
            this.person = person
        }
    }
    

Kotlin Мультиплатформенный

  • Модуль lifecycle-testing теперь совместим с KMP, включая такие API, как TestLifecycleOwner .
  • Модуль lifecycle-viewmodel-savedstate теперь совместим с KMP, включая такие API, как SavedStateHandle .
  • androidx.compose.ui.platform.LocalLifecycleOwner теперь доступен в общем исходном наборе.
  • NewInstanceFactory теперь доступен на платформах JVM Desktop и Android.

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

  • Состояние Lifecycle.DESTROYED является конечным, и любая попытка перевести Lifecycle из него в любое другое состояние теперь приведет к исключению IllegalStateException .
  • SavedStateHandle больше не включает SavedStateProvider.saveState() если возвращаемый Bundle пуст.

Версия 2.9.0-rc01

23 апреля 2025 г.

Выпущен androidx.lifecycle:lifecycle-*:2.9.0-rc01 . Версия 2.9.0-rc01 содержит следующие коммиты .

Предупреждение о совместимости Lint API

  • JetBrains изменила класс KaCallableMemberCall на интерфейс , что нарушает бинарную совместимость. Это может привести к сбоям, если версия AGP вашего проекта отличается от версии, используемой для компиляции lint-проверок. Это обновление было внесено в aosp/3577172 , но отсутствовало в примечаниях к выпуску — мы уточняем это здесь. Рекомендуемое исправление: обновите AGP до последней стабильной версии. Если полное обновление невозможно, используйте android.experimental.lint.version для согласования lint-проверок с вашей версией AGP — подробности см. в разделе «Изменения поведения среды выполнения Compose» .

Версия 2.9.0-beta01

9 апреля 2025 г.

Выпущен androidx.lifecycle:lifecycle-*:2.9.0-beta01 . Версия 2.9.0-beta01 содержит следующие коммиты .

Изменения API

  • Lifecycle ViewModel Compose теперь использует ту же конфигурацию Kotlin Multiplatform, что и Compose Runtime 1.7.1 и более поздние версии: артефакты -desktop удалены, а артефакты -jvmStubs и -linuxx64Stubs добавлены. Ни один из этих целевых объектов не предназначен для использования, они являются заглушками, помогающими работе Jetbrains Compose. ( I5cb14 , b/406592090 )

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

  • Эта библиотека теперь ориентирована на уровень языка Kotlin 2.0 и требует KGP 2.0.0 или более поздней версии. ( Idb6b5 )
  • Lifecycle ViewModel Compose теперь зависит от Compose 1.7.8. ( I5cb14 , b/406592090 )

Версия 2.9.0-альфа13

26 марта 2025 г.

androidx.lifecycle:lifecycle-*:2.9.0-alpha13 выпущен без заметных публичных изменений. Версия 2.9.0-alpha13 содержит следующие коммиты .

Версия 2.9.0-альфа12

12 марта 2025 г.

Выпущен androidx.lifecycle:lifecycle-*:2.9.0-alpha12 . Версия 2.9.0-alpha12 содержит следующие коммиты .

Изменения API

  • Добавьте аннотацию @MainThread в ViewModelProvider.get на всех поддерживаемых платформах KMP. ( I7e8dd , b/397736115 )
  • Переименуйте SavedState*Delegates в SavedState*Delegate . ( I8589b , b/399629301 )

Версия 2.9.0-альфа11

26 февраля 2025 г.

Выпущен androidx.lifecycle:lifecycle-*:2.9.0-alpha11 . Версия 2.9.0-alpha11 содержит следующие коммиты .

Изменения API

  • Добавить параметр SavedStateConfig к делегатам saved() ( I39b3a )

Версия 2.9.0-альфа10

12 февраля 2025 г.

Выпущен androidx.lifecycle:lifecycle-*:2.9.0-alpha10 . Версия 2.9.0-alpha10 содержит следующие коммиты .

Изменения API

  • Переместить MutableStateSerializer в savedstate-compose из lifecycle-viewmodel-compose . ( I4f690 , b/378895074 )

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

  • Добавляет новую проблему Lint для вызова Lifecycle::currentState в композиции, предлагая вместо этого использовать currentStateAsalue().value , чтобы гарантировать, что изменения в состоянии жизненного цикла корректно вызывают перекомпозицию. Спасибо, Стивен Шен! ( Iad484 )

Версия 2.9.0-альфа09

29 января 2025 г.

Выпущена androidx.lifecycle:lifecycle-*:2.9.0-alpha09 . Версия 2.9.0-alpha09 содержит следующие коммиты .

Новые функции

  • Добавить MutableStateSerializer для сериализации androidx.compose.runtime.MutableState . ( Idfc48 , b/378895074 )

Изменения API

  • Заменить перегруженные функции делегата SavedStateHandle.saved() параметрами по умолчанию ( Icd1c1 )
  • AbstractSavedStateViewModelFactory устарел, так как он создаёт SavedStateHandle для каждой ViewModel , что приводит к ненужным накладным расходам. Для более эффективного создания ViewModel используйте ViewModelProvider.Factory с CreationExtras.createSavedStateHandle . ( Ia920b , b/388590327 ).

Версия 2.9.0-альфа08

11 декабря 2024 г.

Выпущена androidx.lifecycle:lifecycle-*:2.9.0-alpha08 . Версия 2.9.0-alpha08 содержит следующие коммиты .

Новые функции

  • Добавьте ViewModelScenario.recreate для имитации завершения системного процесса, воссоздающего тестируемую ViewModel и все связанные с ней компоненты. ( Id6a69 , b/381063087 )
  • Экземпляры LifecycleOwner и ViewModelStoreOwner , полученные через соответствующие API findViewTree , теперь могут быть разрешены через непересекающиеся родительские элементы представления, такие как ViewOverlay . Подробнее о непересекающихся родительских элементах представления см. в примечаниях к выпуску ядра или в документации по ViewTree.setViewTreeDisjointParent . ( I800f4 ).

Изменения API

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

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

  • Эта библиотека теперь использует аннотации JSpecify, определяющие значение null , которые являются типовыми. Разработчикам Kotlin следует использовать следующий аргумент компилятора для обеспечения корректного использования: -Xjspecify-annotations=strict (это значение по умолчанию, начиная с версии 2.1.0 компилятора Kotlin). ( Ie4340 , b/326456246 )
  • Последовательность очистки Document ViewModel.onCleared . ( I586c7 , b/363984116 )

Версия 2.9.0-альфа07

13 ноября 2024 г.

Выпущен androidx.lifecycle:lifecycle-*:2.9.0-alpha07 . Версия 2.9.0-alpha07 содержит следующие коммиты .

Совместимость с Kotlin на разных платформах

  • Lifecycle ViewModel SavedState теперь совместим с KMP. Это позволяет использовать SavedStateHandle в общем коде. ( Ib6394 , b/334076622 )

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

  • Благодаря поддержке сериализации KotlinX, добавленной в SavedState 1.3.0-alpha05 , мы добавили ленивый делегат свойств saved , который упрощает сохранение классов @Serializable в SavedStateHandle и позволяет автоматически восстанавливать эти классы при завершении и восстановлении процесса. Обратите внимание, что saved делегат является ленивым и не будет вызывать лямбда-функцию init и сохранять что-либо в SavedStateHandle до тех пор, пока к нему не будет получен доступ. ( I47a88 , b/376026744 )

    @Serializable
    data class Person(val firstName: String, val lastName: String)
    
    class MyViewModel(handle: SavedStateHandle) : ViewModel() {
        var person by handle.saved { Person("John", "Doe") }
    
        fun onPersonChanged(person: Person) {
            this.person = person
        }
    }
    

Изменения API

  • Добавьте getMutableStateFlow к SavedStateHandle , чтобы возвращать MutableStateFlow . Эта новая функция является ключевой и не может использоваться с getLiveData . При попытке использовать обе функции для доступа к одному и тому же состоянию будет выдано исключение. ( I04a4f , b/375408415 )

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

30 октября 2024 г.

Выпущена androidx.lifecycle:lifecycle-*:2.9.0-alpha06 . Версия 2.9.0-alpha06 содержит следующие коммиты .

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

  • Состояние Lifecycle.DESTROYED является конечным, и любая попытка перевести Lifecycle из него в любое другое состояние теперь приведет к исключению IllegalStateException . ( I116c4 , b/370577987 )
  • SavedStateHandle больше не включает SavedStateProvider.saveState() , если возвращаемый Bundle пуст. ( I910b5 , b/370577987 )

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

  • Lifecycle.eventFlow теперь корректно завершается, когда Lifecycle DESTROYED ( I293b2 , b/374043130 )

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

16 октября 2024 г.

androidx.lifecycle:lifecycle-*:2.9.0-alpha05 выпущен без существенных изменений. Версия 2.9.0-alpha05 содержит следующие коммиты .

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

2 октября 2024 г.

Выпущен androidx.lifecycle:lifecycle-*:2.9.0-alpha04 . Версия 2.9.0-alpha04 содержит следующие коммиты .

Kotlin Мультиплатформенный

  • Модуль lifecycle-viewmodel-savedstate теперь настроен на совместимость с KMP в рамках подготовки к тому, что такие API, как SavedStateHandle , станут доступны в общем исходном наборе в будущем выпуске. ( I503ed , I48764 , b/334076622 )

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

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

Выпущена androidx.lifecycle:lifecycle-*:2.9.0-alpha03 . Версия 2.9.0-alpha03 содержит следующие коммиты .

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

  • Начиная с Lifecycle 2.8.6 : ошибка NullSafeMutableLiveData Lint улучшила поддержку смарт-приведений, избегая ложных срабатываний. ( 85fed6 , b/181042665 )

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

Версия 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 теперь поддерживает значения, допускающие NULL. Спасибо Роману Калукевичу за вклад. ( 0d78ea6 )

Версия 2.8.4

24 июля 2024 г.

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

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

  • LiveData.asFlow() теперь корректно обрабатывает случаи, когда возвращаемый поток немедленно завершается после получения значения, уже установленного в LiveData (например, при использовании take(1) ). ( I9c566 )
  • Завершение Lifecycle*Effect теперь идемпотентно (т. е. если onStopOrDispose был вызван из-за остановки жизненного цикла, он не будет вызван повторно при завершении, если только жизненный цикл снова не вернется в состояние STARTED ). ( I5f607 , b/352364595 )

Версия 2.8.3

1 июля 2024 г.

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

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

  • Исправлена ​​проблема обратной совместимости Lifecycle 2.8 с Compose 1.6.0 и более ранними версиями при использовании сжатия кода. ( aosp/3133056 , b/346808608 )

Версия 2.8.2

12 июня 2024 г.

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

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

  • Исправлена ​​ошибка CompositionLocal LocalLifecycleOwner not present ошибок при использовании Lifecycle 2.8.X с Compose 1.6.X или более ранней версии. Теперь вы можете использовать Lifecycle 2.8.2 с любой версией Compose без необходимости каких-либо обходных путей. ( aosp/3105647 , b/336842920 )
  • ViewModelProvider больше не будет давать сбой при смешивании предыдущих версий зависимостей compileOnly Lifecycle с версиями 2.8+, что устраняет проблемы с такими библиотеками, как LeakCanary. ( I80383 , b/341792251 )

Версия 2.8.1

29 мая 2024 г.

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

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

  • lifecycle-viewmodel-compose теперь имеет только общую зависимость от compose-runtime , что устраняет его общую зависимость от compose-ui . Артефакт Android сохраняет свой compose-ui для совместимости. ( aosp/3079334 , b/339562627 )
  • saveable интеграция ViewModel с использованием делегатов свойств теперь использует имя класса как часть автоматически сгенерированного ключа, избегая конфликтов, если несколько классов используют один и тот же SavedStateHandle . ( aosp/3063463 )

Версия 2.8.0

14 мая 2024 г.

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

Важные изменения по сравнению с версией 2.7.0

  • LocalLifecycleOwner был перемещен из Compose UI в lifecycle-runtime-compose чтобы его вспомогательные API на основе Compose можно было использовать за пределами Compose UI.
  • Артефакт lifecycle-runtime-compose теперь содержит 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 , или использовали viewModelFactory Kotlin DSL.
  • Использование ViewModelProvider без пользовательской фабрики на платформах, отличных от JVM, приведёт к исключению UnsupportedOperationException . На платформах JVM совместимость сохраняется благодаря использованию конструктора ViewModel без аргументов, если пользовательская фабрика не предоставлена.
  • viewModelScope будет возвращаться к EmptyCoroutineContext на платформах, где Dispatchers.Main недоступен (например, Linux).

Затронутые артефакты:

  • lifecycle-viewmodel переводит большинство API в common и поддерживает jvm и iOS в дополнение к Android.
  • lifecycle-viewmodel-ktx теперь пуст, все API перемещены в lifecycle-viewmodel .
  • lifecycle-viewmodel-compose перемещает все API в common и поставляет артефакт Android, соответствующий многоплатформенной поддержке androidx.compose .

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

  • InitializerViewModelFactory (включая функцию конструктора viewModelFactory ) теперь будет выдавать исключение IllegalArgumentException , если initializer с тем же clazz: KClass<VM : ViewModel> уже был добавлен. ( Ic3a36 )

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

Версия 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 , или использовали viewModelFactory Kotlin DSL.
  • Использование ViewModelProvider без пользовательской фабрики на платформах, отличных от JVM, приведёт к исключению UnsupportedOperationException . На платформах JVM совместимость сохраняется благодаря использованию конструктора ViewModel без аргументов, если пользовательская фабрика не предоставлена.
  • viewModelScope будет возвращаться к EmptyCoroutineContext на платформах, где Dispatchers.Main недоступен (например, Linux).

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

  • InitializerViewModelFactory (включая функцию конструктора viewModelFactory ) теперь будет выдавать исключение IllegalArgumentException , если initializer с тем же clazz: KClass<VM : ViewModel> уже был добавлен. ( Ic3a36 )

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

  • ViewModel.getCloseable теперь обрабатывает дублирующиеся ключи: если с key уже связан ресурс AutoCloseable , старый ресурс будет заменен и немедленно закрыт. ( Ibeb67 )
  • Доступ к viewModelScope объекта ViewModel теперь потокобезопасен. ( If4766 , b/322407038 )

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

  • LocalLifecycleOwner перенесён из Compose UI в lifecycle-runtime-compose, чтобы его вспомогательные API на основе Compose можно было использовать вне Compose UI. Спасибо Джейку Уортону за вклад. ( I6c41b , b/328263448 )

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

21 февраля 2024 г.

Выпущена androidx.lifecycle:lifecycle-*:2.8.0-alpha02 . Версия 2.8.0-alpha02 содержит следующие коммиты.

Новые функции

  • Добавлены API dropUnlessResumed и dropUnlessStarted , позволяющие отменять события щелчков или другие события, происходящие даже после того, как LifecycleOwner опустился ниже заданного значения Lifecycle.State . Например, это можно использовать с Navigation Compose, чтобы избежать обработки событий щелчков после перехода на другой экран: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) } ( Icba83 , b/317230685 )

Конвертации Kotlin

  • ViewModel теперь написан на Kotlin ( I16f26 , b/214568825 )
  • Расширения lifecycle-viewmodel-ktx для Kotlin теперь перенесены в базовый модуль жизненного цикла. ( Id787b , b/274800183 )
  • Расширения lifecycle-runtime-ktx для Kotlin теперь перенесены в базовый модуль жизненного цикла. ( Ic3686 , b/274800183 )
  • Расширения lifecycle-livedata-core-ktx для Kotlin теперь перенесены в базовый модуль жизненного цикла. ( I54a3d , b/274800183 )

Совместимость с Kotlin на разных платформах

  • Основные API жизненного цикла в Lifecycle , LifecycleOwner , LifecycleObserver , Lifecycle.State , Lifecycle.Event и LifecycleRegistry теперь поставляются в артефактах, совместимых с Kotlin Multiplatform. ( b/317249252 )

Изменения API

  • Вызов LifecycleStartEffect и LifecycleResumeEffect без ключа теперь является ошибкой, следуя тому же соглашению, что и 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 : если value LiveData установлено, функция map / switchMap будет немедленно вызвана для заполнения возвращаемого value LiveData . Это гарантирует, что начальное значение будет установлено как часть первой композиции (при использовании с observeAsState() ), но не меняет поведение наблюдения: обновлённые значения из исходного LiveData будут применяться только после начала наблюдения LiveData .
  • В этом выпуске исправлена проблема, из-за которой SavedStateHandle не мог должным образом восстанавливать пользовательские классы Parcelable после смерти и воссоздания процесса. Из-за того, что информация о типе теряется платформой Android, массивы пользовательских Parcelables требуют дополнительной работы (создание типизированного массива нужного типа вручную), и документация по get , getLiveData и getStateFlow теперь специально устраняет это ограничение.
  • Правила хранения proguard, связанные с LifecycleObserver , были удалены. Это означает, что защищенный код, который хочет использовать API-интерфейсы посредством отражения (например, используя давно устаревшую аннотацию @OnLifecycleEvent ), должен будет предоставить свои собственные правила хранения для своего конкретного варианта использования.

Наблюдение за событиями жизненного цикла

  • В качестве альтернативы использованию LifecycleEventObserver теперь вы можете наблюдать за Flow Lifecycle.Event с помощью метода расширения Lifecycle.asFlow() .
  • Пользователи Jetpack Compose теперь могут использовать LifecycleEventEffect для запуска побочных эффектов Compose на основе Lifecycle.Event .
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
    viewModel.refreshData()
  }
  // …
}
  • Пользователи Jetpack Compose могут использовать LifecycleStartEffect и LifecycleResumeEffect для обработки пар событий — начало, остановка и возобновление, пауза соответственно. Этот API отражает API, найденный в DisposableEffect и подходит для случаев, когда изменение, вносимое при повышении состояния, необходимо отменить при понижении.
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleStartEffect(viewModel) {
    val timeTracking = viewModel.startTrackingTimeOnScreen()
    onStopOrDispose {
      timeTracking.stopTrackingTimeOnScreen()
    }
  }
  // …
}

Дополнительные сведения см. в разделе Запуск кода при событиях жизненного цикла .

Наблюдаемость за состоянием жизненного цикла

  • Текущий Lifecycle.State теперь можно наблюдать через свойство Lifecycle.currentStateFlow , которое возвращает StateFlow , где value является текущий Lifecycle.State .
  • Пользователи Jetpack Compose могут использовать расширение Lifecycle.currentStateAsState() , чтобы напрямую предоставлять Lifecycle.State как 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-бета01

1 ноября 2023 г.

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

  • Обновление бета-версии, никаких серьезных изменений в этой версии нет.

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

18 октября 2023 г.

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

Новые функции

  • lifecycle-runtime-testing теперь содержит новую проверку Lint, позволяющую избежать установки Lifecycle.State TestLifecycleOwner с использованием поля currentState внутри сопрограммы. Проверка Lint теперь предлагает приостановить setCurrentState , что позволяет установить Lifecycle.State без блокировки. ( Icf728 , б/297880630 )

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

  • Исправлена проблема с LiveData.switchMap , из-за которой возврат одного и того же экземпляра LiveData как при первоначальном вызове, так и при последующем вызове препятствовал добавлению экземпляра LiveData в качестве источника. ( Ibedcba7 )

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

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

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

Новые функции

  • TestLifecycleOwner теперь включает функцию приостановки setCurrentState() , чтобы дать пользователям возможность использовать TestLifecycleOwner из сопрограммы, например, предоставленной runTest . ( I329de , б / 259344129 )

Изменения API

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

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

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

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

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

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

26 июля 2023 г.

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

Изменения API

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

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

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

Версия 2.6

Версия 2.6.2

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

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

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

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

Версия 2.6.1

22 марта 2023 г.

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

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

Версия 2.6.0

8 марта 2023 г.

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

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

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

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

Жизненный цикл 2.5 Жизненный цикл 2.5 (KTX) Жизненный цикл 2.6
Transformations.switchMap(liveData) {...} liveData.switchMap {...} liveData.switchMap {...}
Transformations.map(liveData) {...} liveData.map {...} liveData.map {...}
Transformations.distinctUntilChanged(liveData) {...} liveData.distinctUntilChanged{...} liveData.distinctUntilChanged{...}
LiveDataReactiveStreams.fromPublisher(publisher) publisher.toLiveData() publisher.toLiveData()
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) liveData.toPublisher(lifecycleOwner) liveData.toPublisher(lifecycleOwner)
override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory override val defaultViewModelProviderFactory = factory
override fun getDefaultViewModelCreationExtras(): CreationExtras = extras override fun getDefaultViewModelCreationExtras(): CreationExtras = extras override val defaultViewModelProviderCreationExtras = extras
ViewTreeLifecycleOwner.set(view, owner) ViewTreeLifecycleOwner.set(view, owner) view.setViewTreeLifecycleOwner(owner)
ViewTreeLifecycleOwner.get(view) view.findViewTreeLifecycleOwner() view.findViewTreeLifecycleOwner()
override fun getViewModelStore(): ViewModelStore = store override fun getViewModelStore(): ViewModelStore = store override val viewModelStore: ViewModelStore = store
override fun getLifecycle(): Lifecycle = registry override fun getLifecycle(): Lifecycle = registry override val lifecycle: Lifecycle get() = registry
  • Обнуляемость метода onChanged Observer , созданного в Kotlin, теперь соответствует обнуляемости универсального типа. Если вы хотите, чтобы Observer.onChanged() принимал тип, допускающий значение NULL, вы должны создать экземпляр Observer с типом, допускающим значение NULL.
  • Эти классы также были преобразованы в Kotlin, но остались совместимыми с исходным кодом: DefaultLifecycleObserver , LifecycleEventObserver , Lifecycle , LifecycleRegistry , LifecycleObserver , ViewModelStore , AndroidViewModel , AbstractSavedStateViewModelFactory , LifecycleService , ServiceLifecycleDispatcher и ProcessLifecycleOwner .

Версия 2.6.0-rc01

22 февраля 2023 г.

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

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

  • Расширение LiveData.distinctUntilChanged() теперь устанавливает value возвращаемого LiveData , если для предыдущего LiveData было установлено значение. Это не меняет поведение наблюдения — обновленные значения из исходного LiveData по-прежнему будут применяться только после того, как вы начнете наблюдать за LiveData возвращаемым из distinctUntilChanged() . ( Ib482f )

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

8 февраля 2023 г.

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

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

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

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

25 января 2023 г.

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

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

  • Transformations теперь написаны на Котлине. Это изменение, несовместимое с исходным кодом для тех классов, написанных на Kotlin, которые напрямую использовали синтаксис, такой как Transformations.map — код Kotlin теперь должен использовать синтаксис метода расширения Kotlin, который ранее был доступен только при использовании lifecycle-livedata-ktx . При использовании языка программирования Java версии этих методов, принимающие метод androidx.arch.core.util.Function , считаются устаревшими и заменяются версиями, принимающими Kotlin Function1 . Это изменение поддерживает двоичную совместимость. ( I8e14f )
  • ViewTreeViewModelStoreOwner теперь написан на Kotlin. Это изменение, несовместимое с исходным кодом для классов, написанных на Kotlin — теперь вы должны напрямую импортировать и использовать методы расширения Kotlin в View androidx.lifecycle.setViewTreeViewModelStoreOwner и androidx.lifecycle.findViewTreeViewModelStoreOwner , чтобы установить и найти ранее установленного владельца. Он совместим на двоичном уровне и остается совместимым с исходным кодом для реализаций, написанных на языке программирования Java. ( Ia06d8 , Ib22d8 , b/240298691 )
  • Интерфейс HasDefaultViewModelProviderFactory теперь написан на Kotlin. Это изменение, несовместимое с исходным кодом, для классов, написанных на Kotlin — теперь они должны переопределять свойства defaultViewModelProviderFactory и defaultViewModelCreationExtras , а не реализовывать предыдущие соответствующие функции. ( Iaed9c , б/240298691 )
  • Observer теперь написан на Kotlin. Его метод onChanged() теперь использует value имени для своего параметра. ( Iffef2 , I4995e , b/240298691 )
  • AndroidViewModel , AbstractSavedStateViewModelFactory , LifecycleService , ServiceLifecycleDispatcher и ProcessLifecycleOwner теперь написаны на Kotlin ( I2e771 , Ibae40 , I160d7 , I08884 , I1cda7 , b/240298691 ).

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

11 января 2023 г.

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

Новые функции

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

Изменения API

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

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

  • ViewTreeLifecycleOwner теперь написан на Kotlin. Это изменение, несовместимое с исходным кодом для классов, написанных на Kotlin — теперь вы должны напрямую импортировать и использовать методы расширения Kotlin в View androidx.lifecycle.setViewTreeLifecycleOwner и androidx.lifecycle.findViewTreeLifecycleOwner , чтобы установить и найти ранее установленного владельца. Это заменяет предыдущее расширение Kotlin в lifecycle-runtime-ktx . Он совместим на двоичном уровне и остается совместимым с исходным кодом для реализаций, написанных на языке программирования Java. ( I8a77a , I5234e , б/240298691 )
  • LiveDataReactiveStreams теперь написан на Kotlin. Расширения Kotlin, ранее существовавшие в lifecycle-reactivestreams-ktx были перенесены в модуль lifecycle-reactivestreams и стали основной поверхностью для кода, написанного на Kotlin. Это изменение, несовместимое с исходным кодом , для кода, написанного на Kotlin, если вы еще не использовали API-интерфейсы метода расширения Kotlin. ( I2b1b9 , I95d22 , б/240298691 )
  • DefaultLifecycleObserver , LifecycleEventObserver , Lifecycle , LifecycleRegistry , LifecycleObserver и ViewModelStore теперь написаны на Kotlin ( Iadffd , ( I60034 , I8c52c , I9593d , I01fe1 , I59a23 , b/240298691 )

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

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

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

24 октября 2022 г.

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

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

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

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

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

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

Изменения API

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

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

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

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

29 июня 2022 г.

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

Новые функции

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

Версия 2.5

Версия 2.5.1

27 июля 2022 г.

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

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

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

Версия 2.5.0

29 июня 2022 г.

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

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

  • SavedStateHandle теперь предлагает 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 с помощью одного или нескольких лямбда-инициализаторов, по одному для каждого конкретного класса 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() , который использует лямбда-фабрику для создания экземпляра ViewModel без необходимости создания собственного ViewModelProvider.Factory .

    // Within a @Composable, you can now skip writing a custom Factory
    // and instead write a lambda to do the initialization of your ViewModel
    val detailViewModel = viewModel {
      // This lambda is only called the first time the ViewModel is created
      // and all CreationExtras are available inside the lambda
      val savedStateHandle = createSavedStateHandle()
      DetailViewModel(savedStateHandle)
    }
    
  • Интеграция SavedStateHandle Compose Saver — артефакт lifecycle-viewmodel-compose теперь содержит новые экспериментальные API в SavedStateHandle.saveable , которые позволяют использовать поведение, подобное rememberSaveable , поддерживаемое SavedStateHandle из ViewModel.

    class ListScreenViewModel(handle: SavedStateHandle): ViewModel() {
        // This value survives both configuration changes and process death and recreation
        val editMode by handle.saveable { mutableStateOf(false) }
    }
    
  • Добавлен API addCloseable() и новая перегрузка конструктора, которая позволяет добавлять один или несколько объектов Closeable в ViewModel , которые будут закрыты при очистке ViewModel , не требуя какой-либо ручной работы в onCleared() .

    Например, чтобы создать область сопрограммы, которую вы можете внедрить в ViewModel, но управлять ею посредством тестирования, вы можете создать CoroutineScope , реализующую Closeable :

    class CloseableCoroutineScope(
        context: CoroutineContext = SupervisorJob() + Dispatchers.Main.immediate
    ) : Closeable, CoroutineScope {
        override val coroutineContext: CoroutineContext = context
        override fun close() {
            coroutineContext.cancel()
       }
    }
    

    Который затем можно использовать в конструкторе ViewModel , сохраняя при этом тот же срок службы, что и viewModelScope :

    class TestScopeViewModel(
        val customScope: CloseableCoroutineScope = CloseableCoroutineScope()
    ) : ViewModel(customScope) {
        // You can now use customScope in the same way as viewModelScope
    }
    

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

  • Попытка переместить Lifecycle.State из INITIALIZED в DESTROYED теперь всегда будет вызывать исключение IllegalStateException независимо от того, есть ли у Lifecycle прикрепленный наблюдатель.
  • LifecycleRegistry теперь будет очищать своих наблюдателей, когда они достигают состояния DESTROYED .

Версия 2.5.0-rc02

15 июня 2022 г.

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

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

  • ViewModelProvider больше не будет аварийно завершать работу при смешивании предыдущих версий зависимостей жизненного цикла compileOnly с версиями 2.5+. ( I81a66 , б/230454566 )

Версия 2.5.0-rc01

11 мая 2022 г.

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

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

  • MediatorLiveData.addSource() теперь генерирует исключение NullPointerException при передаче null источника вместо распространения null источника наблюдателям. ( Ibd0fb , b/123085232 )

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

20 апреля 2022 г.

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

Изменения API

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

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

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

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

6 апреля 2022 г.

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

Новые функции

  • Добавьте экспериментальную перегрузку MutableState в SavedStateHandle.saveable для проверки четности с rememberSaveable ( I38cfe , b/224565154 ).

Изменения API

  • CreationExtras теперь является абстрактным, а не запечатанным. ( Ib8a7a )

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

  • Исправлено исключение IllegalStateException: Already attached to lifecycleOwner вызванной SavedStateHandleController . ( I7ea47 , б/215406268 )

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

23 марта 2022 г.

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

Новые функции

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

Изменения API

  • Исправлена проблема совместимости с Lifecycle 2.3 и более поздними версиями Lifecycle на Java. ( I52c8a , б / 219545060 )

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

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

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

9 марта 2022 г.

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

Изменения API

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

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

23 февраля 2022 г.

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

Новые функции

  • Добавлен API addCloseable() и новая перегрузка конструктора, которая позволяет добавлять один или несколько объектов Closeable в ViewModel , которые будут закрыты при очистке ViewModel , не требуя какой-либо ручной работы в onCleared() . ( I55ea0 )
  • lifecycle-viewmodel теперь предоставляет InitializerViewModelFactory , который позволяет добавлять лямбда-выражения для обработки определенных классов ViewModel , используя CreationExtras в качестве основного источника данных. ( If58fc , б/216687549 )
  • lifecycle-viewmodel-compose теперь предлагает API viewModel() , который использует лямбда-фабрику для создания экземпляра ViewModel без необходимости создания собственного ViewModelProvider.Factory . ( I97fbb , б/216688927 )

Изменения API

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

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

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

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

9 февраля 2022 г.

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

Изменения API

  • SavedStateHandle и SavedStateViewModelFactory были преобразованы в Kotlin. Это улучшило возможность обнуления дженериков в обоих классах. ( Ib6ce2 , б/216168263 , I9647a , б/177667711 )
  • Параметр функции LiveData switchMap теперь может иметь вывод, допускающий значение NULL. ( I40396 , б / 132923666 )
  • Расширения LiveData -ktx теперь помечены @CheckResult , чтобы обеспечить использование результата при вызове этих функций. ( Ia0f05 , b/207325134 )

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

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

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

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

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

26 января 2022 г.

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

Создание модели представленияДополнительно

В этом выпуске мы закладываем основу для реструктуризации построения ViewModel . Вместо жесткого набора подклассов ViewModelProvider.Factory , каждый из которых добавляет дополнительную функциональность (позволяя использовать параметр конструктора Application через AndroidViewModelFactory , разрешая параметр конструктора SavedStateHandle через SavedStateViewModelFactory и AbstractSavedStateViewModelFactory и т. д.), мы переходим в мир фабрик без сохранения состояния, которые полагаются на новую концепцию CreationExtras . ( Я7343 , б/188691010 , б/188541057 )

Благодаря этому изменению ViewModelProvider больше не выполняет прямые вызовы предыдущего метода create(Class<T>) ViewModelProvider.Factory . Вместо этого он вызывает новую перегрузку create : create(Class<T>, CreationExtras) . Это означает, что любая прямая реализация экземпляра ViewModelProvider.Factory теперь имеет доступ к каждому из этих новых CreationExtras :

  • ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY : эта String обеспечивает доступ к пользовательскому ключу, который вы передали в ViewModelProvider.get() .
  • ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY предоставляет доступ к классу Application .
  • SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY предоставляет доступ к SavedStateRegistryOwner , который используется для создания этой ViewModel.
  • SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY предоставляет доступ к ViewModelStoreOwner , который используется для создания этой ViewModel.
  • SavedStateHandleSupport.DEFAULT_ARGS_KEY предоставляет доступ к Bundle аргументов, которые следует использовать для создания SavedStateHandle .

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

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

class CustomFactory : ViewModelProvider.Factory {
    override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
        return when (modelClass) {
            HomeViewModel::class -> {
                // Get the Application object from extras
                val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY])
                // Pass it directly to HomeViewModel
                HomeViewModel(application)
            }
            DetailViewModel::class -> {
                // Create a SavedStateHandle for this ViewModel from extras
                val savedStateHandle = extras.createSavedStateHandle()
                DetailViewModel(savedStateHandle)
            }
            else -> throw IllegalArgumentException("Unknown class $modelClass")
        } as T
    }
}

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

Пользовательские CreationExtras могут быть предоставлены путем переопределения getDefaultViewModelCreationExtras() в вашем ComponentActivity или Fragment , что делает их доступными для вашего пользовательского ViewModelProvider.Factory как встроенную форму вспомогательного внедрения. Эти дополнительные возможности будут автоматически доступны вашей пользовательской фабрике при использовании непосредственно с ViewModelProvider или при использовании расширений свойств Kotlin by viewModels() и by activityViewModels() . ( I79f2b , б / 207012584 , б / 207012585 , б / 207012490 )

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

  • Исправлена проблема, из-за которой значение по умолчанию, предоставленное для SavedStateHandle , снова появлялось после смерти и восстановления процесса, даже если оно было специально удалено из SavedStateHandle . В результате этого SavedStateHandle больше не будет объединять значения по умолчанию и восстановленные значения, а вместо этого будет использовать только восстановленные значения в качестве источника истины. ( I53a4b )

Версия 2.4

Версия 2.4.1

9 февраля 2022 г.

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

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

  • Перенесено из жизненного цикла 2.5.0-alpha01 : исправлена проблема, из-за которой значение по умолчанию, предоставленное для SavedStateHandle , снова появлялось после смерти и восстановления процесса, даже если оно было специально удалено из SavedStateHandle . В результате этого SavedStateHandle больше не будет объединять значения по умолчанию и восстановленные значения, а вместо этого будет использовать только восстановленные значения в качестве источника истины. ( I53a4b )
  • lifecycle-process теперь зависит от Androidx Startup 1.1.1 , в котором исправлена регрессия, при которой использование ProcessLifecycleInitializer вызывало StartupException . ( б / 216490724 )

Версия 2.4.0

27 октября 2021 г.

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

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

  • @OnLifecycleEvent устарел. Вместо этого следует использовать LifecycleEventObserver или DefaultLifecycleObserver .
  • Добавлена библиотека androidx.lifecycle:lifecycle-viewmodel-compose . Он предоставляет компонуемый viewModel() и LocalViewModelStoreOwner .
    • Изменение исходного кода : ViewModelProvider был переписан на Kotlin. Метод ViewModelProvider.Factory.create больше не поддерживает универсальный тип, допускающий значение NULL.
  • В androidx.lifecycle:lifecycle-runtime-ktx были добавлены новые API сопрограмм:
  • Lifecycle.repeatOnLifecycle — API, который выполняет блок кода в сопрограмме, когда жизненный цикл находится хотя бы в определенном состоянии. Блок будет отменен и перезапущен по мере того, как жизненный цикл входит в целевое состояние и выходит из него;
  • Flow.flowWithLifecycle — API, который выдает значения из восходящего потока, когда жизненный цикл находится хотя бы в определенном состоянии.
  • DefaultLifecycleObserver был перенесен с lifecycle.lifecycle-common-java8 на lifecycle.lifecycle-common . lifecycle.lifecycle-common-java8 больше не предоставляет никаких дополнительных функций помимо lifecycle.lifecycle-common , поэтому зависимость от него можно заменить на lifecycle.lifecycle-common .
  • API, не относящиеся к сопрограммам, из lifecycle-viewmodel-ktx были перенесены в модуль lifecycle-viewmodel .
  • lifecycle-process теперь использует androidx.startup для инициализации ProcessLifecycleOwner .

    Раньше это делал androidx.lifecycle.ProcessLifecycleOwnerInitializer .

    Если вы использовали tools:node="remove" ContentProvider , который использовался для инициализации жизненного цикла процесса в прошлом, вместо этого вам необходимо сделать следующее.

     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities=\"${applicationId}.androidx-startup"
        android:exported="false"
        tools:node=\"merge">
        <!-- If you are using androidx.startup to initialize other components -->
        <meta-data
            android:name="androidx.lifecycle.ProcessLifecycleInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
     </provider>
    

    (или)

     <!-- If you want to disable androidx.startup completely. -->
     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities="${applicationId}.androidx-startup"
        tools:node="remove">
     </provider>
    

Версия 2.4.0-rc01

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

androidx.lifecycle:lifecycle-*:2.4.0-rc01 выпущен без изменений по сравнению с Lifecycle 2.4.0-beta01. Версия 2.4.0-rc01 содержит эти коммиты.

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

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

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

Изменения API

  • @OnLifecycleEvent устарел. Вместо этого следует использовать LifecycleEventObserver или DefaultLifecycleObserver . ( I5a8fa )
  • DefaultLifecycleObserver был перенесен с androidx.lifecycle.lifecycle-common-java8 на androidx.lifecycle.lifecycle-common . androidx.lifecycle.lifecycle-common-java8 больше не предоставляет никаких дополнительных функций поверх androidx.lifecycle.lifecycle-common , поэтому зависимость от него можно заменить на androidx.lifecycle.lifecycle-common . ( I021aa )
  • API, не относящиеся к сопрограммам, из lifecycle-viewmodel-ktx были перенесены в модуль lifecycle-viewmodel . ( I6d5b2 )

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

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

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

4 августа 2021 г.

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

Изменения API

  • Source-breaking change : ViewModelProvider has been rewritten in Kotlin. ViewModelProvider.Factory.create method no longer allows nullable generic. ( I9b9f6 )

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

  • The Lifecycle.repeatOnLifecycle : block is now always invoked serially when repeating execution. ( Ibab33 )

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

  • Thanks chao2zhang for fixing the code snippets in the repeatOnLifecycle documentation. #205 .

Version 2.4.0-alpha02

16 июня 2021 г.

androidx.lifecycle:lifecycle-*:2.4.0-alpha02 is released. Version 2.4.0-alpha02 contains these commits.

Новые функции

  • Added a new RepeatOnLifecycleWrongUsage lint check to lifecycle-runtime-ktx that detects when repeateOnLifecycle is incorrectly used in onStart() or onResume() . ( 706078 , b/187887400 )

Изменения API

  • The LifecycleOwner.addRepeatingJob API is removed in favor of Lifecycle.repeatOnLifecycle that respects structured concurrency and is easier to reason about. ( I4a3a8 )
  • Make ProcessLifecycleInitializer public so other androidx.startup.Initializer s can use these as dependencies. ( I94c31 )

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

  • Fixed an issue with the NullSafeMutableLiveData lint check when the field has modifiers. ( #147 , b/183696616 )
  • Fixed another issue with the NullSafeMutableLiveData lint check when using generics. ( #161 , b/184830263 )

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

Version 2.4.0-alpha01

24 марта 2021 г.

androidx.lifecycle:lifecycle-*:2.4.0-alpha01 is released. Version 2.4.0-alpha01 contains these commits.

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

  • lifecycle-process now uses androidx.startup to initialize the ProcessLifecycleOwner .

    Previously, this was being done by androidx.lifecycle.ProcessLifecycleOwnerInitializer .

    If you used tools:node="remove" the ContentProvider being used to initialize process lifecycle in the past, then you need to do the following instead.

     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities=\"${applicationId}.androidx-startup"
        android:exported="false"
        tools:node=\"merge">
        <!-- If you are using androidx.startup to initialize other components -->
        <meta-data
            android:name="androidx.lifecycle.ProcessLifecycleInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
     </provider>
    

    (или)

     <!-- If you want to disable androidx.startup completely. -->
     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities="${applicationId}.androidx-startup"
        tools:node="remove">
     </provider>
    

Изменения API

  • Added a Flow.flowWithLifecycle API that emits values from the upstream Flow when the lifecycle is at least in a certain state using the Lifecycle.repeatOnLifecycle API. This is an alternative to the also new LifecycleOwner.addRepeatinJob API. ( I0f4cd )

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

  • From Lifecycle 2.3.1 : The NonNullableMutableLiveData lint rule can now properly differentiate between field variables with different nullability. ( b/169249668 )

Lifecycle Viewmodel Compose Version 1.0.0

Version 1.0.0-alpha07

16 июня 2021 г.

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07 is released. Version 1.0.0-alpha07 contains these commits.

Breaking API Changes

  • viewModel() now takes an optional ViewModelStoreOwner , making it easier to work with owners other than the LocalViewModelStoreOwner . For example, you can now use viewModel(navBackStackEntry) to retrieve a ViewModel associated with a particular navigation graph. ( I2628d , b/188693123 )

Version 1.0.0-alpha06

June 2, 2021

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06 is released. Version 1.0.0-alpha06 contains these commits.

Updated to be compatible with Compose version 1.0.0-beta08 .

Version 1.0.0-alpha05

18 мая 2021 г.

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05 is released. Version 1.0.0-alpha05 contains these commits.

Новые функции

  • Updated to be compatible with Compose version 1.0.0-beta07 .

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

  • The AndroidManifest files from ui-test-manifest and ui-tooling-data are now compatible with Android 12 ( I6f9de , b/184718994 )

Version 1.0.0-alpha04

7 апреля 2021 г.

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04 is released. Version 1.0.0-alpha04 contains these commits.

Dependency Changes

  • This version allows androidx.hilt:hilt-navigation-compose and androidx.navigation:navigation-compose to sync dependencies on androidx.compose.compiler:compiler:1.0.0-beta04 and androidx.compose.runtime:runtime:1.0.0-beta04 . For 1.0.0, it is required that the compiler and runtime match.

Version 1.0.0-alpha03

10 марта 2021 г.

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha03 is released. Version 1.0.0-alpha03 contains these commits.

Изменения API

  • LocalViewModelStoreOwner.current now returns a 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 )

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

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

August 19, 2020

androidx.lifecycle:lifecycle-*:2.3.0-alpha07 is released. Version 2.3.0-alpha07 contains these commits.

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

  • Fixed a crash issue in the NullSafeMutableLiveData Lint check. ( aosp/1395367 )

Version 2.3.0-alpha06

22 июля 2020 г.

androidx.lifecycle:lifecycle-*:2.3.0-alpha06 is released. Version 2.3.0-alpha06 contains these commits.

Новые функции

  • Added static helper methods of downFrom(State) , downTo(State) , upFrom(State) , upTo(State) 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

June 10, 2020

androidx.lifecycle:lifecycle-*:2.3.0-alpha04 is released. Version 2.3.0-alpha04 contains these commits.

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

  • Fixed a crash in the NonNullableMutableLiveData Lint check. ( b/157294666 )
  • The NonNullableMutableLiveData Lint check now covers significantly more cases where 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

March 4, 2020

androidx.lifecycle:lifecycle-*:2.3.0-alpha01 is released. Version 2.3.0-alpha01 contains these commits.

Новые функции

  • A new ViewTreeLifecycleOwner.get(View) API allows you to retrieve the 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 )

Внешние взносы

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

Внешние взносы

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

Version 2.2.0-beta01

October 9, 2019

androidx.lifecycle:lifecycle-*:2.2.0-beta01 is released. Version 2.2.0-beta01 contains these commits .

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

  • Fixed a regression introduced in Lifecycle 2.2.0-alpha05 in the ordering of ProcessLifecycleOwner and the activity'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

September 5, 2019

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

Новые функции

  • lifecycleScope , whenCreated , whenStarted , whenResumed , viewModelScope , and the underlying implementation of liveData now use Dispatchers.Main.immediate instead of Dispatchers.Main . ( b/139740492 )

Внешние взносы

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

Version 2.2.0-alpha03

August 7, 2019

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

Новые функции

Изменения API

  • 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

  • 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

October 9, 2019

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01 is released. Version 1.0.0-beta01 contains these commits .

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

  • Fixed an issue where accessing a SavedState ViewModel for the first time in Activity.onActivityResult() would result in 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

  • 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

August 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

September 5, 2019

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

Version 2.1.0-rc01

2 июля 2019 г.

androidx.lifecycle:*:2.1.0-rc01 is released with no changes from androidx.lifecycle:*:2.1.0-beta01 . The commits included in this version can be found here .

Version 2.1.0-beta01

7 мая 2019 г.

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

Новые функции

  • Lifecycles are graduated to beta: api introduced in previous alphas such as liveData extension functions for transformations and observations, ViewModel initialisation with property delegation and others are stabilised and not going to change.

Version 2.1.0-alpha04

3 апреля 2019 г.

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

Изменения API

  • Breaking change: the underlying API behind by viewModels() 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

  • 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

  • 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

21 сентября 2018 г.

Lifecycle 2.0.0 is released with one bugfix from 2.0.0-rc01 in ViewModel.

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

  • Fixed a ViewModel proguard rule that incorrectly removed constructors b/112230489

Version 2.0.0-beta01

2 июля 2018 г.

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

  • Fixed LifecycleObserver proguard rule to keep only implementations, not subinterfaces b/71389427
  • Fixed ViewModel proguard rules to allow obfuscation and shrinking

Pre-AndroidX Versions

For the pre-AndroidX versions of Lifecycle that follow, include these dependencies:

dependencies {
    def lifecycle_version = "1.1.1"

    // ViewModel and LiveData
    implementation "android.arch.lifecycle:extensions:$lifecycle_version"
    // alternatively - just ViewModel
    implementation "android.arch.lifecycle:viewmodel:$lifecycle_version" // For Kotlin use viewmodel-ktx
    // alternatively - just LiveData
    implementation "android.arch.lifecycle:livedata:$lifecycle_version"
    // alternatively - Lifecycles only (no ViewModel or LiveData).
    //     Support library depends on this lightweight import
    implementation "android.arch.lifecycle:runtime:$lifecycle_version"

    annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version" // For Kotlin use kapt instead of annotationProcessor
    // alternately - if using Java8, use the following instead of compiler
    implementation "android.arch.lifecycle:common-java8:$lifecycle_version"

    // optional - ReactiveStreams support for LiveData
    implementation "android.arch.lifecycle:reactivestreams:$lifecycle_version"

    // optional - Test helpers for LiveData
    testImplementation "android.arch.core:core-testing:$lifecycle_version"
}

Версия 1.1.1

March 21, 2018

Only one small change: android.arch.core.util.Function is moved from arch:runtime to arch:common . This allows it to be used without the runtime dependency, eg in paging:common below.

lifecycle:common is a dependency of lifecycle:runtime , so this change doesn't affect lifecycle:runtime directly, only modules that depend directly on lifecycle:common , as Paging does.

Версия 1.1.0

January 22, 2018

Packaging Changes

New, much smaller dependencies are now available:

  • android.arch.lifecycle:livedata:1.1.0
  • android.arch.lifecycle:viewmodel:1.1.0

Изменения API

  • The deprecated LifecycleActivity 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.