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

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

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

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

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

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

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

Котлин

классный

    dependencies {
        def lifecycle_version = "2.8.7"
        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"

        // 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.8.7"
        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")

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

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

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

Версия 2.9

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

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

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

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

  • Из жизненного цикла 2.8.6 : ошибка NullSafeMutableLiveData Lint улучшила поддержку интеллектуального приведения, что позволяет избежать ложных срабатываний. ( 85фед6 , б/181042665 )

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

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

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

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

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

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

  • Переместите androidx.compose.ui.platform.LocalLifecycleOwner в общий исходный набор (KMP). Спасибо Ивану Маткову из JetBrains за вклад. ( 8cd5d03 )
  • Начиная с жизненного цикла 2.8.5 : делегат расширения SavedStateHandle.saveable теперь поддерживает значения, допускающие значение NULL. Спасибо Роману Калукевичу за вклад. ( 0d78ea6 )

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

7 августа 2024 г.

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

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

  • lifecycle-testing теперь совместимо с KMP. ( Iea41e )
  • Добавлена ​​поддержка многоплатформенной цели Kotlin linuxArm64 ( I139d3 , b/338268719 ).

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

  • Доступен новый артефакт KMP androidx.lifecycle:lifecycle-viewmodel-testing , который предоставляет класс ViewModelScenario для изолированного тестирования ViewModels с поддержкой onCleared (все платформы) и SavedStateHandle (только Android). ( 337f68d , c9b3409 , 9799a95c , b/264602919 )
  • Создание ViewModel с помощью ViewModelProvider теперь является потокобезопасным; Аннотации @MainThread были удалены. ( Ifd978 , б/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.6

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

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

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

  • Ошибка NullSafeMutableLiveData Lint улучшила поддержку интеллектуального приведения, что позволяет избежать ложных срабатываний. ( 85фед6 , б/181042665 )

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

  • Жизненный цикл выполнения Compose теперь зависит от Compose Runtime 1.7.1

Версия 2.8.5

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

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

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

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

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

  • Делегат расширения SavedStateHandle.saveable теперь поддерживает значения, допускающие значение NULL. Спасибо Роману Калукевичу за вклад. ( 0d78ea6 )

Версия 2.8.4

24 июля 2024 г.

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

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

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

Версия 2.8.3

1 июля 2024 г.

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

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

  • Исправлена ​​проблема с обратной совместимостью Lifecycle 2.8 с Compose 1.6.0 и более ранними версиями при использовании сжатия кода. ( аосп/3133056 , б/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 без каких-либо обходных путей. ( аосп/3105647 , б/336842920 )
  • ViewModelProvider больше не будет аварийно завершать работу при смешивании предыдущих версий зависимостей жизненного цикла compileOnly с версиями 2.8+, что устраняет проблемы с такими библиотеками, как LeakCanary. ( I80383 , б/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 для совместимости. ( аосп/3079334 , б/339562627 )
  • saveable интеграция ViewModel с использованием делегатов свойств теперь использует имя класса как часть автоматически создаваемого ключа, что позволяет избежать конфликтов, если несколько классов используют один и тот же SavedStateHandle . ( аосп/3063463 )

Версия 2.8.0

14 мая 2024 г.

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

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

  • LocalLifecycleOwner был перенесен из пользовательского интерфейса Compose в lifecycle-runtime-compose , чтобы его вспомогательные API на основе Compose можно было использовать за пределами пользовательского интерфейса Compose.
  • Артефакт lifecycle-runtime-compose теперь содержит API dropUnlessResumed и dropUnlessStarted , которые позволяют отбрасывать клики или другие события, которые происходят даже после того, как LifecycleOwner опустился ниже заданного Lifecycle.State . Например, это можно использовать с Navigation Compose, чтобы избежать обработки событий щелчка после того, как переход на другой экран уже начался: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
  • ViewModel.viewModelScope теперь является переопределяемым параметром конструктора, позволяющим вам внедрить собственный диспетчер и SupervisorJob() или переопределить значение по умолчанию, используя backgroundScope доступный в runTest . ( I2817c , б / 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 сохранена, но есть несколько заметных изменений при сравнении поверхности Android API с общей поверхностью 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 . ( аосп/3038274 , б/322382422 )
  • Исправлено непреднамеренное изменение порядка очистки экземпляров AutoCloseable , прикрепленных к ViewModel: был восстановлен предыдущий порядок addCloseable(String, AutoCloseable) , затем addClosable(AutoCloseable) и onCleared() . ( аосп/3041632 )
  • Улучшите поведение создания по умолчанию для viewModelScope для собственных сред и сред рабочего стола JVM. ( аосп/3039221 )

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

  • Спасибо Виктору Кроппу за улучшение проверки основного потока на JVM Desktop. ( аосп/3037116 )

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

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 . ( б/330323282 )

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

  • NullSafeMutableLiveData был переработан, чтобы избежать множества ложных срабатываний. ( I2d8c1 , Iafb18 , I03463 , I7ecef )

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

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

20 марта 2024 г.

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

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

  • ViewModel.viewModelScope теперь является переопределяемым параметром конструктора, позволяющим вам внедрить собственный диспетчер и SupervisorJob() или переопределить значение по умолчанию, используя backgroundScope доступный в runTest . ( I2817c , б / 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. ( б/214568825 )

Чтобы учесть это изменение, такие методы, как методы ViewModelProvider , которые принимали java.lang.Class<T> теперь имеют эквивалентный метод, который принимает kotlin.reflect.KClass<T> .

Бинарная совместимость на Android сохранена, но есть несколько заметных изменений при сравнении поверхности Android API с общей поверхностью 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 , старый ресурс будет заменен и немедленно закрыт. ( Ибеб67 )
  • Доступ к viewModelScope ViewModel теперь является потокобезопасным. ( Если4766 , б/322407038 )

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

  • LocalLifecycleOwner перешёл из пользовательского интерфейса Compose в пользовательский интерфейс жизненного цикла, чтобы его вспомогательные API на основе Compose можно было использовать за пределами пользовательского интерфейса Compose. Спасибо Джейку Уортону за вклад. ( I6c41b , б/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 )

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

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

Мультиплатформенная совместимость Kotlin

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

Изменения API

  • Вызов LifecycleStartEffect и LifecycleResumeEffect без ключа теперь является ошибкой в ​​соответствии с тем же соглашением, что и API DisposableEffect , который отражают эти API. ( Ib0e0c , б/323518079 )
  • ViewModel теперь использует AutoCloseable вместо Closeable . Это обратно совместимое изменение. ( I27f8e , б / 214568825 )
  • LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) устарел в пользу LiveData.toPublisher(lifecycleOwner) . ( Ябе29 , б/262623005 )

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

  • Спасибо Ивану Маткову из Jetbrains за помощь в переносе Lifecycle на мультиплатформу Kotlin. ( aosp/2926690 , I0c5ac , If445d )

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

24 января 2024 г.

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

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

  • ViewModel теперь поддерживает добавление объектов Closeable с key , который позволяет получить их с помощью getCloseable() . ( I3cf63 )

Версия 2.7

Версия 2.7.0

10 января 2024 г.

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

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

  • TestLifecycleOwner теперь включает функцию приостановки setCurrentState() , которая гарантирует, что изменение состояния и все обратные вызовы LifecycleObserver будут завершены перед возвратом. Примечательно, что в отличие от установки свойства currentState напрямую, здесь не используется runBlocking , что делает его безопасным для использования в сопрограмме, например, предоставленной runTest .
  • Расширения LiveData для map и switchMap теперь отражают поведение distinctUntilChanged — если для LiveData установлено value , функция map / switchMap будет немедленно вызвана для заполнения value возвращаемого LiveData . Это гарантирует, что начальное значение будет установлено как часть первой композиции (при использовании с observeAsState() ), но не меняет поведение наблюдения — значения обновлений из источника LiveData по-прежнему будут применяться только после того, как вы начнете наблюдать за LiveData .
  • В этом выпуске исправлена ​​проблема, из-за которой SavedStateHandle не мог должным образом восстанавливать пользовательские классы Parcelable после смерти и воссоздания процесса. Из-за того, что информация о типе теряется платформой Android, массивы пользовательских Parcelables требуют дополнительной работы (создание типизированного массива нужного типа вручную), и документация по get , getLiveData и getStateFlow теперь специально устраняет это ограничение.
  • Правила хранения proguard, связанные с LifecycleObserver были удалены. Это означает, что защищенный код, который хочет использовать 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 , b/240298691 )
  • LiveDataReactiveStreams теперь написан в Котлине. Ранее расширения Kotlin в lifecycle-reactivestreams-ktx были перемещены в модуль lifecycle-reactivestreams и стали основной поверхностью для кода, написанного в котлине. Это несовместимое изменение источника для кода, написанного в Котлине, если вы еще не использовали API метода расширения Kotlin. ( I2b1b9 , i95d22 , b/240298691 )
  • DefaultLifecycleObserver , LifecycleEventObserver , Lifecycle , LifecycleRegistry , LifecycleObserver и ViewModelStore теперь написаны в Kotlin ( IADFFD , ( I60034 , I8C52C , I9593D , I01FE1 , I59A23, B/2402989898989111), I01FE1, I59A23 , B/24029898989891.8691 ).

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

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

Версия 2.6.0-Alpha03

24 октября 2022 г.

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

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

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

Версия 2.6.0-Alpha02

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

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

Изменения API

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

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

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

Версия 2.6.0-Alpha01

29 июня 2022 г.

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

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

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

Версия 2.5

Версия 2.5.1

27 июля 2022 г.

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

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

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

Версия 2.5.0

29 июня 2022 г.

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

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

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

  • ViewModel CreationExtras - При написании пользовательского ViewModelProvider.Factory больше не требуется расширять AndroidViewModelFactory или AbstractSavedStateViewModelFactory , чтобы получить доступ к Application или SavedStateHandle , соответственно. Вместо этого эти поля предоставляются для каждого подкласса ViewModelProvider.Factory как CreationExtras через новую перегрузку create : create(Class<T>, CreationExtras) . Эти дополнения предоставляются автоматически вашей деятельностью или фрагментом при использовании активности 1.5.0 и фрагмента 1.5.0 соответственно.

    class CustomFactory : ViewModelProvider.Factory {
        override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
            return when (modelClass) {
                HomeViewModel::class -> {
                    // Get the Application object from extras
                    val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY])
                    // Pass it directly to HomeViewModel
                    HomeViewModel(application)
                }
                DetailViewModel::class -> {
                    // Create a SavedStateHandle for this ViewModel from extras
                    val savedStateHandle = extras.createSavedStateHandle()
                    DetailViewModel(savedStateHandle)
                }
                else -> throw IllegalArgumentException("Unknown class $modelClass")
            } as T
        }
    }
    
  • lifecycle-viewmodel теперь предоставляет viewModelFactory Kotlin DSL, который позволяет вам определить свой ViewModelProvider.Factory с точки зрения одного или нескольких инициализаторов Lambda, один для каждого конкретного класса ViewModel , которые ваши пользовательские заводские опоры с использованием CreationExtras в качестве основного источника данных.

    val customFactory = viewModelFactory {
        // The return type of the lambda automatically sets what class this lambda handles
        initializer {
            // Get the Application object from extras provided to the lambda
            val application = checkNotNull(get(ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY))
            HomeViewModel(application)
        }
        initializer {
            val savedStateHandle = createSavedStateHandle()
            DetailViewModel(savedStateHandle)
        }
    }
    
  • lifecycle-viewmodel-compose теперь предлагает API viewModel() , который занимает фабрику Lambda для создания экземпляра ViewModel не требуя создания пользовательского ViewModelProvider.Factory .

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

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

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

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

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

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

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

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

Версия 2.5.0-RC02

15 июня 2022 года

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

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

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

Версия 2.5.0-RC01

11 мая 2022 г.

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

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

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

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

20 апреля 2022 года

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

Изменения API

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

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

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

Версия 2.5.0-Alpha06

6 апреля 2022 г.

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

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

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

Изменения API

  • CreationExtras теперь абстрактно, а не герметично. ( IB8A7A )

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

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

Версия 2.5.0-Alpha05

23 марта 2022 г.

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

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

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

Изменения API

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

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

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

Версия 2.5.0-Alpha04

9 марта 2022 г.

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

Изменения API

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

Версия 2.5.0-Alpha03

23 февраля 2022 г.

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

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

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

Изменения API

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

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

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

Версия 2.5.0-Alpha02

9 февраля 2022 г.

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

Изменения API

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

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

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

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

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

Версия 2.5.0-Alpha01

26 января 2022 г.

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

ViewModel CreationExtras

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

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

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

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

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

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

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

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

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

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

Версия 2.4

Версия 2.4.1

9 февраля 2022 г.

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

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

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

Версия 2.4.0

27 октября 2021 г.

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

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

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

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

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

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

    (или)

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

Версия 2.4.0-RC01

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

androidx.lifecycle:lifecycle-*:2.4.0-rc01 выпускается без изменений из жизненного цикла 2.4.0-бета01. Версия 2.4.0-RC01 содержит эти коммиты.

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

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

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

Изменения API

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

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

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

Версия 2.4.0-Alpha03

4 августа 2021 г.

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

Изменения API

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

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

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

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

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

Версия 2.4.0-Alpha02

16 июня 2021 г.

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

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

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

Изменения API

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

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

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

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

Версия 2.4.0-Alpha01

24 марта 2021 г.

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

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

  • lifecycle-process теперь использует androidx.startup для инициализации ProcessLifecycleOwner .

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

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

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

    (или)

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

Изменения API

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

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

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

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

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

16 июня 2021 г.

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

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

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

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

2 июня 2021 года

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

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

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

18 мая 2021 г.

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

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

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

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

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

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

7 апреля 2021 года

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

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

  • Эта версия позволяет androidx.hilt:hilt-navigation-compose и androidx.navigation:navigation-compose , чтобы синхронизировать зависимости от androidx.compose.compiler:compiler:1.0.0-beta04 и androidx.compose.runtime:runtime:1.0.0-beta04 . Для 1.0.0 требуется, чтобы компилятор и совпадение времени выполнения.

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

10 марта 2021 г.

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

Изменения API

  • LocalViewModelStoreOwner.current теперь возвращает нулевой ViewModelStoreOwner , чтобы лучше определить, доступен ли ViewModelStoreOwner в текущей композиции. API, которые требуют ViewModelStoreOwner , например, viewModel() и NavHost , все еще бросают исключение, если не установлен ViewModelStoreOwner . ( IDF39a )

Версия 1.0.0.0.0.0.0.0.0.0.0.0.0.0.02

24 февраля 2021 г.

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

Изменения API

  • LocalViewModelStoreOwner теперь имеет provides функции, которые можно использовать с CompositionLocalProvider , заменив API asProvidableCompositionLocal() . ( I45d24 )

Жизненный цикл Viewmodel-Compose версии 1.0.0-Alpha01

10 февраля 2021 г.

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

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

  • Composable и LocalViewModelStoreOwner viewModel() были перемещены из androidx.compose.ui.viewinterop этого артефакта в пакете androidx.lifecycle.viewmodel.compose . ( I7a374 )

Версия 2.3.1

Жизненный цикл версии 2.3.1

24 марта 2021 г.

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

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

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

Версия 2.3.0

Версия 2.3.0

10 февраля 2021 г.

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

Основные изменения с 2.2.0

  • Поддержка SavedStateHandle для неразовых классов : SavedStateHandle теперь поддерживает ленивую сериализацию, позволяя вам позвонить setSavedStateProvider() для данного ключа, предоставляя SavedStateProvider , который получит обратный вызов для saveState() , когда SavedStateHandle просят сохранить его состояние. См . Сохранение не-ласковых классов .
  • Содействие поведению жизненного цикла :
    • LifeCyclereGistry в настоящее время обеспечивает соблюдение DESTROYED как терминальное государство.
    • LifecycleRegistry теперь проверяет, что ее методы вызываются в основной поток. Это всегда было требованием для жизненных циклов деятельности, фрагментов и т. Д. Добавление наблюдателей из неэ-мэльных потоков привело к трудностям в сбоях во время выполнения. Для объектов LifecycleRegistry , которые принадлежат вашим собственным компонентам, вы можете явно отказаться от чеков, используя LifecycleRegistry.createUnsafe(...) , но затем вы должны убедиться, что правильная синхронизация введена, когда доступна к этой LifecycleRegistry .
  • Помогатели жизни и события жизненного цикла : добавлены статические вспомогательные методы downFrom(State) , downTo(State) , upFrom(State) , upTo(State) в Lifecycle.Event для создания Event с учетом State и направления перехода. Добавлен метод getTargetState() , который предоставляет State , что жизненный цикл будет переходить непосредственно после Event .
  • withStateAtLeast : Добавлен API-интерфейс Lifecycle.withStateAtLeast , которые ожидают состояния жизненного цикла и запускают не подвижный блок кодового синхронного в точке состояния, а затем возобновите с результатом. Эти API отличаются от существующих when* , поскольку они не разрешают запуск приостановленного кода и не используют пользовательский диспетчер. ( AOSP/1326081 )
  • API ViewTree : новый ViewTreeLifecycleOwner.get(View) и ViewTreeViewModelStoreOwner.get(View) API позволяет получить содержащий LifecycleOwner и ViewModelStoreOwner , соответственно, с учетом экземпляра View . Вы должны перейти на действие 1.2.0 и фрагмент 1.3.0 , а также AppCompat 1.3.0-Alpha01 или выше, чтобы правильно заполнить это. findViewTreeLifecycleOwner и findViewTreeViewModelStoreOwner Kotlin расширения доступны в lifecycle-runtime-ktx и lifecycle-viewmodel-ktx , соответственно.
  • LiveData.observe() Увеличение удлинения котлина : расширение LiveData.observe() Kotlin, необходимое для использования синтаксиса Lambda, теперь устарело, поскольку это не требуется при использовании Kotlin 1.4.

Версия 2.3.0-RC01

16 декабря 2020 г.

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

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

  • Метод keys() SavedStateHandle теперь согласован до и после сохранения состояния - теперь он включает в себя клавиши, ранее используемые с setSavedStateProvider() в дополнение к ключам, используемым с set() и getLiveData() . ( AOSP/1517919 , B/174713653 )

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

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

1 октября 2020 г.

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

Изменения API

  • Расширение Kotlin LiveData.observe() необходимое для использования синтаксиса Lambda, теперь устарело, поскольку это не требуется при использовании Kotlin 1.4. ( I40d3f )

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

КОМЕНТАЦИЯ ИЗМЕНЕНИЯ

  • Документы liveData Builder и asLiveData() были обновлены, чтобы включить подробности об изменении заданных значений тайм -аута. ( AOSP/1122324 )

Версия 2.3.0-Alpha07

19 августа 2020 г.

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

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

  • Исправлена ​​проблема с аварией в чек на NullSafeMutableLiveData lint. ( AOSP/1395367 )

Версия 2.3.0-Alpha06

22 июля 2020 г.

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

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

  • Добавлены статические вспомогательные методы downFrom(State) , downTo(State) Event upFrom(State) , upTo(State) State Lifecycle.Event . Добавлен метод getTargetState() , который предоставляет State , что жизненный цикл будет переходить непосредственно после Event . ( I00887 )
  • Добавлен API-интерфейс Lifecycle.withStateAtLeast , которые ожидают состояния жизненного цикла, и запускают не подвижный блок кода синхронно в точке изменения состояния, затем возобновите с результатом. Эти API отличаются от существующих when* , поскольку они не разрешают запуск приостановленного кода и не используют пользовательский диспетчер. ( AOSP/1326081 )

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

  • LifeCyclereGistry в настоящее время обеспечивает соблюдение DESTROYED как терминальное государство. ( I00887 )
  • LifecycleRegistry теперь проверяет, что ее методы вызываются в основной поток. Это всегда было требованием для жизненных циклов деятельности, фрагментов и т. Д. Добавление наблюдателей из неэ-мэльных потоков привело к трудностям в сбоях во время выполнения. Для объектов LifecycleRegistry , которые принадлежат вашим собственным компонентам, вы можете явно отказаться от проверки, используя LifecycleRegistry.createUnsafe(...) , но затем вы должны убедиться, что соответствующая синхронизация введена, когда эта LifecycleRegistry доступна из разных потоков ( IE7280 , B/137392809 )

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

  • Исправлена ​​авария в NullSafeMutableLiveData . ( B/159987480 )
  • Исправлена ObsoleteLintCustomCheck для чеков с ворсом, связанными с lifecycle-livedata-core-ktx (и, в частности, NullSafeMutableLiveData ). ( B/158699265 )

Версия 2.3.0-Alpha05

24 июня 2020 г.

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

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

  • LiveData теперь лучше обрабатывает случаи повторного въезда, избегая дублирующих вызовов onActive() или onInactive() . ( B/157840298 )
  • Исправлена ​​проблема, когда проверки Lint не будут работать при использовании Android Studio 4.1 Canary 6 или выше. ( AOSP/1331903 )

Версия 2.3.0-Alpha04

10 июня 2020 г.

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

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

  • Исправлена ​​авария в проверке LINT NonNullableMutableLiveData . ( B/157294666 )
  • Проверка Lint NonNullableMutableLiveData теперь охватывает значительно больше случаев, когда на MutableLiveData было установлено значение null значения с параметрам не нулевого типа. ( б/156002218 )

Версия 2.3.0-Alpha03

20 мая 2020 г.

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

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

  • SavedStateHandle теперь поддерживает ленивую сериализацию, позволяя вам вызовать setSavedStateProvider() для данного ключа, предоставляя SavedStateProvider , который получит обратный вызов saveState() когда SavedStateHandle просят сохранить его состояние. ( B/155106862 )
  • Новый API ViewTreeViewModelStoreOwner.get(View) позволяет получить содержащий ViewModelStoreOwner , данный экземпляр View . Вы должны перейти на активность 1.2.0-alpha05 , фрагмент 1.3.0-alpha05 и Appcompat 1.3.0-alpha01 , чтобы правильно заполнить это. Расширение Kotlin findViewModelStoreOwner() было добавлено в lifecycle-viewmodel-ktx . ( AOSP/1295522 )

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

  • Исправлена ​​проблема, которая привела к тому, что чеки Lint MutableLiveData , выпущенные в жизненном цикле 2.3.0-alpha01 были опубликованы вместе с артефактом lifecycle-livedata-core-ktx . ( B/155323109 )

Версия 2.3.0-Alpha02

29 апреля 2020 г.

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

Изменения API

  • SavedStateViewModelFactory теперь позволяет вам передавать нулевое Application к своему конструктору для лучшей поддержки случаев, когда кто -то недоступен, и поддержка AndroidViewModel не нужна. ( AOSP/1285740 )

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

  • Улучшенная производительность холодного запуска, избегая сбоя проверки класса на API 28 и нижних устройствах. ( AOSP/1282118 )

Версия 2.3.0-Alpha01

4 марта 2020 г.

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

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

  • Новый API ViewTreeLifecycleOwner.get(View) позволяет получить содержащий LifecycleOwner учитывая экземпляр View . Вы должны перейти на действие 1.2.0-alpha01 и фрагмент 1.3.0-alpha01 чтобы правильно заполнить это. findViewTreeLifecycleOwner Kotlin Extension доступен в lifecycle-runtime-ktx . ( AOSP/1182361 , AOSP/1182956 )
  • Добавлена ​​новая проверка Lint, которая предупреждает вас при установлении null значения на MutableLiveData , которая была определена в Котлине как не нулевой. Это доступно при использовании артефактов livedata-core-ktx или livedata-ktx . ( 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

January 22, 2020

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

Important changes since 2.1.0

  • Lifecycle Coroutine Integration : The new lifecycle-runtime-ktx artifact adds integration between Lifecycle and Kotlin coroutines. The lifecycle-livedata-ktx has also been expanded to take advantage of coroutines. See Use Kotlin coroutines with Architecture Components for more details.
  • ViewModelProviders.of() deprecation : ViewModelProviders.of() has been deprecated. You can pass a Fragment or FragmentActivity to the new ViewModelProvider(ViewModelStoreOwner) constructor to achieve the same functionality when using Fragment 1.2.0 .
  • lifecycle-extensions Artifact Deprecation : With the above deprecation of ViewModelProviders.of() , this release marks the deprecation of the last API in lifecycle-extensions and this artifact should now be considered deprecated in its entirety. We strongly recommend depending on the specific Lifecycle artifacts you need (such as lifecycle-service if you're using LifecycleService and lifecycle-process if you're using ProcessLifecycleOwner ) rather than lifecycle-extensions as there will not be a future 2.3.0 release of lifecycle-extensions .
  • Gradle Incremental Annotation Processor : Lifecycle's annotation processor is incremental by default. If your app is written in the Java 8 programming language you can use DefautLifecycleObserver instead; and if it's written in the Java 7 programming language you can use LifecycleEventObserver .

Version 2.2.0-rc03

4 декабря 2019 г.

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

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

  • Fixed a failure occurring when a mocked ViewModel was stored in ViewModelStore and queried later with default factory.
  • Fix a usage of Dispatchers.Main.immediate in launchWhenCreated and similar methods to be called synchronously during corresponding lifecycle event. ( aosp/1156203 )

External contributions

  • Thanks to Anders Järleberg for contributing the fix! ( aosp/1156203 )
  • Thanks to Vsevolod Tolstopyatov from Jetbrains for reviewing an implementation of inlined execution.

Dependency changes

  • Lifecycle Extensions now depends on Fragment 1.2.0-rc03 .

Version 2.2.0-rc02

7 ноября 2019 г.

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

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

  • Fixed a bug in the proguard setup of the library that affected devices running API 28+ if the target API is below 29. ( b/142778206 )

Version 2.2.0-rc01

October 23, 2019

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

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

  • Fixed an issue where launchWhenCreated and related methods would run one frame later than the associated lifecycle method due to its use of Dispatchers.Main instead of Dispatchers.Main.immediate . ( aosp/1145596 )

External contributions

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

Version 2.2.0-beta01

9 октября 2019 г.

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

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

  • Fixed a regression introduced in Lifecycle 2.2.0-alpha05 in the ordering of ProcessLifecycleOwner and the activity's LifecycleOwner moving to started and resumed on Android 10 devices. ( aosp/1128132 )
  • Fixed a regression introduced in Lifecycle 2.2.0-alpha05 which would cause a NullPointerException when using version 2.0.0 or 2.1.0 of lifecycle-process . ( b/141536990 )

Version 2.2.0-alpha05

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

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

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

  • Fixed a race condition in coroutine livedata builder. b/140249349

Version 2.2.0-alpha04

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

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

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

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

External contributions

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

Version 2.2.0-alpha03

7 августа 2019 г.

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

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

Изменения API

  • 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

May 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

Version 1.0.0

January 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

October 23, 2019

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01 is released with no changes from 1.0.0-beta01 . Version 1.0.0-rc01 contains these commits .

ViewModel-Savedstate Version 1.0.0-beta01

9 октября 2019 г.

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

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

  • Fixed an issue where accessing a SavedState ViewModel for the first time in Activity.onActivityResult() would result in an IllegalStateException . ( b/139093676 )
  • Fixed an IllegalStateException when using AbstractSavedStateViewModelFactory . ( b/141225984 )

ViewModel-SavedState Version 1.0.0-alpha05

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

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

Изменения 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

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.

Version 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 .

Version 2.1.0

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

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

Version 2.1.0-rc01

2 июля 2019 г.

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

Version 2.1.0-beta01

May 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

January 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

December 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.

Version 2.0.0

Version 2.0.0

September 21, 2018

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

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

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

Version 2.0.0-beta01

July 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

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.
,

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

Lifecycle-aware components perform actions in response to a change in the lifecycle status of another component, such as activities and fragments. These components help you produce better-organized, and often lighter-weight code, that is easier to maintain.

This table lists all the artifacts in the androidx.lifecycle group.

Артефакт Стабильный выпуск Кандидат на выпуск Бета-версия Альфа-релиз
жизненный цикл-* 2.8.6 - - 2.9.0-alpha03
lifecycle-viewmodel-compose 2.8.6 - - 2.9.0-alpha03
This library was last updated on: September 18, 2024

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

To add a dependency on Lifecycle, you must add the Google Maven repository to your project. Для получения дополнительной информации прочтите репозиторий Google Maven .

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

Котлин

классный

    dependencies {
        def lifecycle_version = "2.8.7"
        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"

        // 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.8.7"
        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")

        // 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.8.7"
        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.8.7"
        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")
    }
    

For more information about dependencies, see Add Build Dependencies .

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

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

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

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

Version 2.9

Version 2.9.0-alpha03

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

androidx.lifecycle:lifecycle-*:2.9.0-alpha03 is released. Version 2.9.0-alpha03 contains these commits .

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

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

Version 2.9.0-alpha02

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

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

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

  • From Lifecycle 2.8.5 : Update the androidx.lifecycle.ReportFragment ProGuard rules to allow obfuscation . ( ff898e1 )

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

  • Move androidx.compose.ui.platform.LocalLifecycleOwner to common source set (KMP). Thanks Ivan Matkov from JetBrains for the contribution. ( 8cd5d03 )
  • From Lifecycle 2.8.5 : SavedStateHandle.saveable` extension delegate now supports nullable values. Thanks Roman Kalukiewicz for the contribution. ( 0d78ea6 )

Version 2.9.0-alpha01

7 августа 2024 г.

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

Kotlin Multiplatform

  • lifecycle-testing is now KMP compatible. ( Iea41e )
  • Add support for linuxArm64 kotlin multiplatform target ( I139d3 , b/338268719 )

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

  • A new androidx.lifecycle:lifecycle-viewmodel-testing KMP artifact is available that provides a ViewModelScenario class for testing ViewModels in isolation, with support for onCleared (all platforms) and SavedStateHandle (Android only). ( 337f68d , c9b3409 , 9799a95c , b/264602919 )
  • Creating a ViewModel with ViewModelProvider is now thread safe; @MainThread annotations have been removed. ( Ifd978 , b/237006831 )

Изменения API

  • Add the CreationExtras.Key() factory function to simplify the creation of anonymous CreationExtras.Key objects. ( I970ee )
  • CreationExtras now includes map-like operator overloads to enable idiomatic manipulation of content in Kotlin. It allows the use of in , += , and + with CreationExtras . ( Ib4353 )
  • CreationExtras now implements equals , hashCode , and toString methods. ( Ib4353 )
  • NewInstanceFactory is now available on JVM Desktop and Android targets. ( d3d0892 )
  • Inline extension property to expose underlying Application safely in Kotlin language version 2.0 ( I39df2 )

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

  • Removed manual outlining of access to new platform APIs since this happens automatically via API modeling when using R8 with AGP 7.3 or later (eg R8 version 3.3) and for all builds when using AGP 8.1 or later (eg D8 version 8.1). Clients who are not using AGP are advised to update to D8 version 8.1 or later. See this article for more details. ( If6b4c , b/345472586 )

Version 2.8

Version 2.8.6

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

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

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

  • The NullSafeMutableLiveData Lint error has improved support for smart casts, avoiding false positives. ( 85fed6 , b/181042665 )

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

Version 2.8.5

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

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

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

  • Update the androidx.lifecycle.ReportFragment ProGuard rules to allow obfuscation . ( ff898e1 )

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

  • SavedStateHandle.saveable extension delegate now supports nullable values. Thanks Roman Kalukiewicz for the contribution. ( 0d78ea6 )

Version 2.8.4

24 июля 2024 г.

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

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

  • LiveData.asFlow() now correctly handles cases where the returned Flow is immediately completed after receiving a value already set on the LiveData (for example, when using take(1) ). ( I9c566 )
  • Lifecycle*Effect completion is now idempotent (ie, if the onStopOrDispose was called because of the Lifecycle being stopped, it won't be called a second time upon disposal unless the Lifecycle goes back up to STARTED again). ( I5f607 , b/352364595 )

Version 2.8.3

1 июля 2024 г.

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

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

  • Fixed an issue with Lifecycle 2.8's backward compatibility with Compose 1.6.0 and lower when using code shrinking. ( aosp/3133056 , b/346808608 )

Version 2.8.2

12 июня 2024 г.

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

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

  • Fixed CompositionLocal LocalLifecycleOwner not present errors when using Lifecycle 2.8.X with Compose 1.6.X or earlier - you can now use Lifecycle 2.8.2 with any version of Compose without any workarounds required. ( aosp/3105647 , b/336842920 )
  • ViewModelProvider will no longer crash when mixing previous versions of compileOnly Lifecycle dependencies with versions 2.8+, fixing issues with libraries such as LeakCanary. ( I80383 , b/341792251 )

Version 2.8.1

29 мая 2024 г.

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

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

  • lifecycle-viewmodel-compose now only has a common dependency on compose-runtime , removing its common dependency on compose-ui . The Android artifact retains its compose-ui for compatibility. ( aosp/3079334 , b/339562627 )
  • ViewModel 's saveable integration using property delegates now uses the class name as part of the auto-generated key, avoiding conflicts if multiple classes use the same SavedStateHandle . ( aosp/3063463 )

Version 2.8.0

14 мая 2024 г.

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

Important changes since 2.7.0

  • LocalLifecycleOwner has been moved from Compose UI to lifecycle-runtime-compose so that its Compose-based helper APIs can be used outside of Compose UI.
  • The lifecycle-runtime-compose artifact now contains the dropUnlessResumed and dropUnlessStarted APIs which allow you to drop click or other events that occur even after the LifecycleOwner has dropped below the given Lifecycle.State . For example, this can be used with Navigation Compose to avoid handling click events after a transition to another screen has already begun: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
  • ViewModel.viewModelScope is now an overridable constructor parameter, allowing you to inject your own dispatcher and SupervisorJob() or to override the default by using the backgroundScope available within 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 has been rewritten in Kotlin and now uses AutoClosable instead of Closeable . It now supports adding AutoCloseable objects with a key that allows retrieving them via getCloseable() .

  • Calling LifecycleStartEffect and LifecycleResumeEffect without a key is now an error, following the same convention as the DisposableEffect API that these APIs mirror.

  • Deprecated LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) in favor of LiveData.toPublisher(lifecycleOwner) .

  • The lifecycle-livedata-core-ktx kotlin extensions have now been moved to the lifecycle-livedata-core module.

  • The NullSafeMutableLiveData has been refactored to avoid many false positives.

Lifecycle Kotlin Multiplatform Compatibility

The core Lifecycle APIs in Lifecycle , LifecycleOwner , LifecycleObserver , Lifecycle.State , Lifecycle.Event , and LifecycleRegistry are now shipped in artifacts compatible with Kotlin Multiplatform.

Artifacts impacted:

  • lifecycle-common moves most APIs to common and supports jvm and iOS in addition to Android.
  • lifecycle-runtime moves most APIs to common and supports jvm and iOS in addition to Android.
  • lifecycle-runtime-ktx is now empty, with all APIs being moved into lifecycle-runtime .
  • lifecycle-runtime-compose moves all APIs to common and ships an Android artifact, matching the multiplatform support of androidx.compose .

ViewModel Kotlin Multiplatform Compatibility

The lifecycle-viewmodel artifact and APIs like ViewModel , ViewModelStore , ViewModelStoreOwner , and ViewModelProvider are now shipped in artifacts compatible with Kotlin Multiplatform.

To accommodate this change, methods such as those on ViewModelProvider that took a java.lang.Class<T> now have an equivalent method that takes a kotlin.reflect.KClass<T> .

Binary compatibility on Android has been maintained, but there are a few notable changes when comparing the Android API surface to the common API surface:

  • Constructing a ViewModelProvider instance is now done through the ViewModelProvider.create() methods rather than directly calling its constructor.
  • ViewModelProvider.NewInstanceFactory and ViewModelProvider.AndroidViewModelFactory are only available on Android.
    • Custom Factories are recommended to extend from ViewModelProvider.Factory and use the create method that takes a CreationExtras or use the viewModelFactory Kotlin DSL.
  • Using ViewModelProvider without a custom factory on non-JVM platforms will result in an UnsupportedOperationException . On JVM platforms, compatibility is preserved by using the no-args ViewModel constructor if a custom factory is not provided.
  • viewModelScope will fallback to an EmptyCoroutineContext in platforms where Dispatchers.Main is not available (eg, Linux).

Artifacts impacted:

  • lifecycle-viewmodel moves most APIs to common and supports jvm and iOS in addition to Android.
  • lifecycle-viewmodel-ktx is now empty, with all APIs being moved into lifecycle-viewmodel .
  • lifecycle-viewmodel-compose moves all APIs to common and ships an Android artifact, matching the multiplatform support of androidx.compose .

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

  • InitializerViewModelFactory (including viewModelFactory builder function) will now throw an IllegalArgumentException if a initializer with the same clazz: KClass<VM : ViewModel> has already been added. ( Ic3a36 )

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

Version 2.8.0-rc01

1 мая 2024 г.

androidx.lifecycle:lifecycle-*:2.8.0-rc01 is released. Version 2.8.0-rc01 contains these commits .

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

  • Fixed an issue where the Baseline Profile for lifecycle-common classes was not properly packaged. These are now packaged in the lifecycle-runtime AAR. ( aosp/3038274 , b/322382422 )
  • Fixed an unintentional ordering change in how AutoCloseable instances attached to a ViewModel are cleared - the previous order of addCloseable(String, AutoCloseable) , then addClosable(AutoCloseable) , then onCleared() has been restored. ( aosp/3041632 )
  • Improve the default creation behavior for viewModelScope for native and JVM Desktop environments. ( aosp/3039221 )

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

  • Thanks Victor Kropp for improving the checking for the main thread on JVM Desktop. ( aosp/3037116 )

Version 2.8.0-beta01

17 апреля 2024 г.

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

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

  • The lifecycle-runtime-compose artifact is now compatible with Kotlin Multiplatform, moving its code to common and ships an Android artifact, matching the multiplatform support for androidx.compose . ( If7a71 , I4f4a0 , b/331769623 )

Version 2.8.0-alpha04

3 апреля 2024 г.

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

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

  • The lifecycle-viewmodel-compose artifact is now compatible with Kotlin Multiplatform, moving its code to common and ships an Android artifact, matching the multiplatform support of androidx.compose . The accommodate this change, the Composable viewModel method now accepts a KClass in addition to a java.lang.Class . ( b/330323282 )

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

Dependency update

  • The lifecycle-viewmodel-compose artifact now depends on Compose 1.6.0.
  • Lifecycle now depends on Profile Installer 1.3.1 .

Version 2.8.0-alpha03

20 марта 2024 г.

androidx.lifecycle:lifecycle-*:2.8.0-alpha03 is released. Version 2.8.0-alpha03 contains these commits .

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

  • ViewModel.viewModelScope is now an overridable constructor parameter, allowing you to inject your own dispatcher and SupervisorJob() or to override the default by using the backgroundScope available within 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 Multiplatform Compatibility

The lifecycle-viewmodel artifact and APIs like ViewModel , ViewModelStore , ViewModelStoreOwner , and ViewModelProvider are now shipped in artifacts compatible with Kotlin Multiplatform. ( b/214568825 )

To accommodate this change, methods such as those on ViewModelProvider that took a java.lang.Class<T> now have an equivalent method that takes a kotlin.reflect.KClass<T> .

Binary compatibility on Android has been maintained, but there are a few notable changes when comparing the Android API surface to the common API surface:

  • Constructing a ViewModelProvider instance is now done through the ViewModelProvider.create() methods rather than directly calling its constructor.
  • ViewModelProvider.NewInstanceFactory and ViewModelProvider.AndroidViewModelFactory are only available on Android.
    • Custom Factories are recommended to extend from ViewModelProvider.Factory and use the create method that takes a CreationExtras or use the viewModelFactory Kotlin DSL.
  • Using ViewModelProvider without a custom factory on non-JVM platforms will result in an UnsupportedOperationException . On JVM platforms, compatibility is preserved by using the no-args ViewModel constructor if a custom factory is not provided.
  • viewModelScope will fallback to an EmptyCoroutineContext in platforms where Dispatchers.Main is not available (eg, Linux).

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

  • InitializerViewModelFactory (including viewModelFactory builder function) will now throw an IllegalArgumentException if a initializer with the same clazz: KClass<VM : ViewModel> has already been added. ( Ic3a36 )

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

  • ViewModel.getCloseable now handles duplicated keys: if the key already has an AutoCloseable resource associated with it, the old resource will be replaced and closed immediately. ( Ibeb67 )
  • Accessing the viewModelScope of a ViewModel is now thread safe. ( If4766 , b/322407038 )

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

  • LocalLifecycleOwner moved from Compose UI to lifecycle-runtime-compose so that its Compose-based helper APIs can be used outside of Compose UI. Thanks Jake Wharton for the contribution. ( I6c41b , b/328263448 )

Version 2.8.0-alpha02

21 февраля 2024 г.

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

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

  • The dropUnlessResumed and dropUnlessStarted APIs have been added which allow you to drop click or other events that occur even after the LifecycleOwner has dropped below the given Lifecycle.State . For example, this can be used with Navigation Compose to avoid handling click events after a transition to another screen has already begun: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) } ( Icba83 , b/317230685 )

Kotlin Conversions

  • ViewModel is now written in Kotlin ( I16f26 , b/214568825 )
  • The lifecycle-viewmodel-ktx kotlin extensions have now been moved to the base lifecycle module. ( Id787b , b/274800183 )
  • The lifecycle-runtime-ktx kotlin extensions have now been moved to the base lifecycle module. ( Ic3686 , b/274800183 )
  • The lifecycle-livedata-core-ktx kotlin extensions have now been moved to the base lifecycle module. ( I54a3d , b/274800183 )

Kotlin Multiplatform Compatibility

  • The core Lifecycle APIs in Lifecycle , LifecycleOwner , LifecycleObserver , Lifecycle.State , Lifecycle.Event , and LifecycleRegistry are now shipped in artifacts compatible with Kotlin Multiplatform. ( b/317249252 )

Изменения API

  • Calling LifecycleStartEffect and LifecycleResumeEffect without a key is now an error, following the same convention as the DisposableEffect API that these APIs mirror. ( Ib0e0c , b/323518079 )
  • ViewModel now uses AutoCloseable instead of Closeable . That is a backward compatible change. ( I27f8e , b/214568825 )
  • Deprecated LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) in favor of LiveData.toPublisher(lifecycleOwner) . ( Iabe29 , b/262623005 )

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

  • Thanks Ivan Matkov from Jetbrains for helping move Lifecycle to Kotlin Multiplatform. ( aosp/2926690 , I0c5ac , If445d )

Version 2.8.0-alpha01

24 января 2024 г.

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

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

  • ViewModel now supports adding Closeable objects with a key that allows retrieving them via getCloseable() . ( I3cf63 )

Version 2.7

Version 2.7.0

10 января 2024 г.

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

Important changes since 2.6.0

  • TestLifecycleOwner now includes a suspending function setCurrentState() which ensures that the state change and all LifecycleObserver callbacks are completed before returning. Notably, unlike setting the currentState property directly, this does not use runBlocking , making it safe to use within a coroutine such as one provided by runTest .
  • The LiveData extensions of map and switchMap now mirror the behavior of distinctUntilChanged - if the LiveData has a value set, the map / switchMap function will be immediately called to populate the value of the returned LiveData . This ensures that the initial value will be set as part of the first composition (when used with observeAsState() ), but does not change the observation behavior - updates values from the source LiveData will still only apply once you start observing the LiveData .
  • This release fixes an issue where SavedStateHandle would not properly restore custom Parcelable classes after process death and recreation. Due to type information that is lost by the Android framework, arrays of custom Parcelables require additional work (manually creating a typed array of the right type) and the documentation on get , getLiveData , and getStateFlow now specifically calls this limitation out.
  • The proguard keep rules associated with LifecycleObserver have been removed. This means that proguarded code that wishes to use APIs via reflection (such as using the long since deprecated @OnLifecycleEvent annotation) will need to provide their own keep rules for their specific use case.

Lifecycle Event Observability

  • As an alternative to using a LifecycleEventObserver , you can now observe a Flow of Lifecycle.Event via the Lifecycle.asFlow() extension method.
  • Jetpack Compose users can now use LifecycleEventEffect to run Compose side effects based on Lifecycle.Event .
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
    viewModel.refreshData()
  }
  // …
}
  • Jetpack Compose users can use LifecycleStartEffect and LifecycleResumeEffect to handle pairs of events - started to stopped and resumed to paused, respectively. This API mirrors the one found in DisposableEffect and is suitable for cases where the change being made when the state is going up needs to be reversed when going back down.
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleStartEffect(viewModel) {
    val timeTracking = viewModel.startTrackingTimeOnScreen()
    onStopOrDispose {
      timeTracking.stopTrackingTimeOnScreen()
    }
  }
  // …
}

See Run code on lifecycle events for more information.

Lifecycle State Observability

  • The current Lifecycle.State can now be observed via the Lifecycle.currentStateFlow property, which returns a StateFlow where the value is the current Lifecycle.State .
  • Jetpack Compose users can use the Lifecycle.currentStateAsState() extension to directly expose Lifecycle.State as Compose State . This is equivalent (and a shorter alternative) to lifecycle.currentStateFlow.collectAsState() .

See Collect lifecycle state with flows for more information.

Version 2.7.0-rc02

13 декабря 2023 г.

androidx.lifecycle:lifecycle-*:2.7.0-rc02 is released. Version 2.7.0-rc02 contains these commits.

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

  • Fixed an issue where SavedStateHandle would not properly restore custom Parcelable classes after process death and recreation. Due to type information that is lost by the Android framework, arrays of custom Parcelables require additional work (manually creating a typed array of the right type) and the documentation on get , getLiveData , and getStateFlow now specifically calls this limitation out. ( I0b55a )

Version 2.7.0-rc01

15 ноября 2023 г.

androidx.lifecycle:lifecycle-*:2.7.0-rc01 is released. Version 2.7.0-rc01 contains these commits.

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

  • LifecycleStartEffect and LifecycleResumeEffect now correctly dispose and recreate the effect block if the LifecycleOwner is changed. ( Ia25c6 )

Version 2.7.0-beta01

1 ноября 2023 г.

androidx.lifecycle:lifecycle-*:2.7.0-beta01 is released with no changes. Version 2.7.0-beta01 contains these commits.

  • A beta version bump, no major changes to this release version.

Version 2.7.0-alpha03

18 октября 2023 г.

androidx.lifecycle:lifecycle-*:2.7.0-alpha03 is released. Version 2.7.0-alpha03 contains these commits.

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

  • lifecycle-runtime-testing now contains a new Lint check to avoid setting the Lifecycle.State of the TestLifecycleOwner by using the currentState field when inside of a coroutine. The Lint check now suggests the suspending setCurrentState which allows setting the Lifecycle.State without blocking. ( Icf728 , b/297880630 )

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

  • Fixed an issue with LiveData.switchMap where returning the same LiveData instance both on the initial call and a subsequent call would prevent the LiveData instance from being added as a source. ( Ibedcba7 )

Version 2.7.0-alpha02

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

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

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

  • TestLifecycleOwner now includes the suspending function setCurrentState() to give users the option of using TestLifecycleOwner from within a coroutine such as one provided by runTest . ( I329de , b/259344129 )

Изменения API

  • All files from the lifecycle-livedata-ktx modules have been moved into the main lifecycle-livedata module. ( I10c6f , b/274800183 )

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

  • The LiveData.map() and LiveData.switchMap() extensions now sets the value of the returned LiveData if the previous LiveData has had a value set on it, ensuring that using the resulting LiveData in Jetpack Compose has the right state on the initial composition . ( I91d2b , b/269479952 )
  • ViewModel 's addCloseable() now immediately closes the Closeable if the ViewModel has already received a call to onCleared() . ( I4712e , b/280294730 )

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

  • From Lifecycle 2.6.2 : Fixed an issue where SavedStateHandle would not correctly be restored after process death if the state was restored, save() was called without actually saving the state in the parent SavedStateRegistry , and then the state was restored again. This fixes the interaction between rememberSaveable and Navigation Compose's NavHost . ( aosp/2729289 )

Version 2.7.0-alpha01

26 июля 2023 г.

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

Изменения API

  • Lifecycle.State is now Compose-observable via Lifecycle.currentStateFlow , which returns a StateFlow where the value is the current Lifecycle.State . ( Ib212d , b/209684871 )
  • Lifecycle.Event s can now able to be observed as a Flow with Lifecycle.asFlow(). ( If2c0f , b/176311030 )
  • LifecycleResumeEffect API has been added to run Compose SideEffect s based on both Lifecycle.Event.ON_RESUME and Lifecycle.Event.ON_PAUSE event callbacks. ( I60386 , b/235529345 )
  • LifecycleStartEffect API has been added to run Compose SideEffect s based on Lifecycle.Event.ON_START and Lifecycle.Event.ON_STOP event callbacks. ( I5a8d1 , b/235529345 )
  • LifecycleEventEffect API has been added to run Compose SideEffect s based on Lifecycle.Event . ( Ic9794 , b/235529345 )
  • Lifecycle.collectAsState() extension has been added to directly expose Lifecycle.State as Compose State . This is equivalent (and a shorter alternative) to lifecycle.currentStateFlow.collectAsState() . ( I11015 , b/235529345 )

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

  • The LiveData.distinctUntilChanged() extension now sets the value of the returned LiveData if the previous LiveData has had a value set on it. This does not change the observation behavior - updated values from the source LiveData will still only apply once you start observing the LiveData returned from distinctUntilChanged() . ( Ib482f )
  • The proguard keep rules associated with LifecycleObserver have been removed. This means that proguarded code that wishes to use APIs via reflection will need to provide their own keep rules for their specific use case. ( Ia12fd )

Version 2.6

Version 2.6.2

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

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

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

  • Fixed an issue where SavedStateHandle would not correctly be restored after process death if the state was restored, save() was called without actually saving the state in the parent SavedStateRegistry , and then the state was restored again. This fixes the interaction between rememberSaveable and Navigation Compose's NavHost . ( aosp/2729289 )

Version 2.6.1

22 марта 2023 г.

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

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

Version 2.6.0

8 марта 2023 г.

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

Important changes since 2.5.0

  • LiveData now includes a new isInitialized property that indicates whether an explicit value has ever been set on the LiveData , allowing you to distinguish between liveData.value returning null because no value has ever been set or an explicit null value.
  • MediatorLiveData now includes a constructor to set an initial value.
  • Added a new extension on StateFlow and Flow of collectAsStateWithLifecycle() that collect from flows and represents its latest value as Compose State in a lifecycle-aware manner.
  • Lifecycle.launchWhenX methods and Lifecycle.whenX methods have been deprecated as the use of a pausing dispatcher can lead to wasted resources in some cases. It is recommended to use Lifecycle.repeatOnLifecycle . For more information about one-time suspending work, please see this explanation on why this is inherently unsafe.
  • Kotlin Conversion - A large number of Lifecycle classes have been converted to Kotlin. All converted classes still retain their binary compatibility with previous versions. The following classes have source incompatible changes for classes written in Kotlin: ViewTreeLifecycleOwner , LiveDataReactiveStreams , HasDefaultViewModelProviderFactory , ViewTreeViewModelStoreOwner , Transformations , ViewModelStoreOwner , LifecycleOwner

The table below provides the source conversions for the new version of lifecycle.

Lifecycle 2.5 Lifecycle 2.5 (KTX) Lifecycle 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
  • The nullability of the onChanged method of a Observer created in Kotlin now matches the nullability of the generic type. If you want Observer.onChanged() to accept a nullable type, you must instantiate the Observer with a nullable type.
  • These classes were also converted to Kotlin, but remain source compatible: DefaultLifecycleObserver , LifecycleEventObserver , Lifecycle , LifecycleRegistry , LifecycleObserver , ViewModelStore , AndroidViewModel , AbstractSavedStateViewModelFactory , LifecycleService , ServiceLifecycleDispatcher , and ProcessLifecycleOwner

Version 2.6.0-rc01

22 февраля 2023 г.

androidx.lifecycle:lifecycle-*:2.6.0-rc01 is released. Version 2.6.0-rc01 contains these commits.

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

  • The LiveData.distinctUntilChanged() extension now sets the value of the returned LiveData if the previous LiveData has had a value set on it. This does not change the observation behavior - updated values from the source LiveData will still only apply once you start observing the LiveData returned from distinctUntilChanged() . ( Ib482f )

Version 2.6.0-beta01

8 февраля 2023 г.

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

Kotlin Conversions

  • LifecycleOwner is now written in Kotlin. This is a source incompatible change for classes written in Kotlin - they must now override the lifecycle property rather than implementing the previous getLifecycle() function. ( I75b4b , b/240298691 )
  • ViewModelStoreOwner is now in Kotlin. This is a source incompatible change for classes written in Kotlin - they must now override the viewModelStore property rather than implementing the previous getViewModelStore() function. ( I86409 , b/240298691 )
  • The Kotlin extension on LifecycleOwner that provides the lifecycleScope field has been moved to the lifecycle-common artifact from lifecycle-runtime-ktx . ( I41d78 , b/240298691 )
  • The Kotlin extension on Lifecycle that provides the coroutineScope field has been moved to the lifecycle-common artifact from lifecycle-runtime-ktx . ( Iabb91 , b/240298691 )

Version 2.6.0-alpha05

25 января 2023 г.

androidx.lifecycle:lifecycle-*:2.6.0-alpha05 is released. Version 2.6.0-alpha05 contains these commits.

Kotlin Conversions

  • Transformations is now written in Kotlin. This is a source incompatible change for those classes written in Kotlin that were directly using syntax such as Transformations.map - Kotlin code must now use the Kotlin extension method syntax that was previously only available when using lifecycle-livedata-ktx . When using the Java programming language, the versions of these methods that take an androidx.arch.core.util.Function method are deprecated and replaced with the versions that take a Kotlin Function1 . This change maintains binary compatibility. ( I8e14f )
  • ViewTreeViewModelStoreOwner is now written in Kotlin. This is a source incompatible change for those classes written in Kotlin - you must now directly import and use the Kotlin extension methods on View of androidx.lifecycle.setViewTreeViewModelStoreOwner and androidx.lifecycle.findViewTreeViewModelStoreOwner to set and find a previously set owner. This is binary compatible and remains source compatible for implementations written in the Java programming language. ( Ia06d8 , Ib22d8 , b/240298691 )
  • The HasDefaultViewModelProviderFactory interface is now written in Kotlin. This is a source incompatible change for classes written in Kotlin - they must now override the defaultViewModelProviderFactory and defaultViewModelCreationExtras properties rather than implementing the previous corresponding functions. ( Iaed9c , b/240298691 )
  • Observer is now written in Kotlin. Its onChanged() method now uses the name value for its parameter. ( Iffef2 , I4995e , b/240298691 )
  • AndroidViewModel , AbstractSavedStateViewModelFactory , LifecycleService , ServiceLifecycleDispatcher , and ProcessLifecycleOwner are now written in Kotlin ( I2e771 , Ibae40 , I160d7 , I08884 , I1cda7 , b/240298691 )

Version 2.6.0-alpha04

11 января 2023 г.

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

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

  • LiveData now includes a new isInitialized property that indicates whether an explicit value has ever been set on the LiveData , allowing you to distinguish between liveData.value returning null because no value has ever been set or an explicit null value. ( Ibd018 )

Изменения API

  • The collectAsStateWithLifecycle() APIs of lifecycle-runtime-compose are no longer in experimental status. ( I09d42 , b/258835424 )
  • Lifecycle.launchWhenX methods and Lifecycle.whenX methods have been deprecated as the use of a pausing dispatcher can lead to wasted resources in some cases. It is recommended to use Lifecycle.repeatOnLifecycle . ( Iafc54 , b/248302832 )

Kotlin Conversions

  • ViewTreeLifecycleOwner is now written in Kotlin. This is a source incompatible change for those classes written in Kotlin - you must now directly import and use the Kotlin extension methods on View of androidx.lifecycle.setViewTreeLifecycleOwner and androidx.lifecycle.findViewTreeLifecycleOwner to set and find a previously set owner. This replaces the previous Kotlin extension in lifecycle-runtime-ktx . This is binary compatible and remains source compatible for implementations written in the Java programming language. ( I8a77a , I5234e , b/240298691 )
  • LiveDataReactiveStreams is now written in Kotlin. The Kotlin extensions previously in lifecycle-reactivestreams-ktx have been moved into the lifecycle-reactivestreams module and have become the primary surface for code written in Kotlin. This is a source incompatible change for code written in Kotlin if you were not already using the Kotlin extension method APIs. ( I2b1b9 , I95d22 , b/240298691 )
  • DefaultLifecycleObserver , LifecycleEventObserver , Lifecycle , LifecycleRegistry , LifecycleObserver , and ViewModelStore are now written in Kotlin ( Iadffd , ( I60034 , I8c52c , I9593d , I01fe1 , I59a23 , b/240298691 )

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

  • SavedStateHandle no longer crashes with a ClassCastException when calling get() with the incorrect class type. ( I6ae7c )

Version 2.6.0-alpha03

24 октября 2022 г.

androidx.lifecycle:lifecycle-*:2.6.0-alpha03 is released. Version 2.6.0-alpha03 contains these commits.

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

  • Fixed an issue with constraints between different Lifecycle modules not working as intended. ( I18d0d , b/249686765 )
  • Errors thrown by LifecycleRegistry.moveToState() now include a more helpful error messaging that informs developers of the component causing the error. ( Idf4b2 , b/244910446 )

Version 2.6.0-alpha02

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

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

Изменения API

  • MediatorLiveData now includes a constructor to set an initial value. ( Ib6cc5 , b/151244085 )

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

  • Lifecycle artifacts now include constraints that ensure that all inter-dependent Lifecycle artifacts use the same version, automatically upgrading other dependencies when one is upgraded. b/242871265
  • FlowLiveData.asFlow() now creates a callbackFlow rather than using its own Channel implementation to ensure thread-safety and context preservation. ( I4a8b2 , b/200596935 )
  • FlowLiveData 's asLiveData function will now preserve the initial value of a StateFlow when creating the new LiveData object. ( I3f530 , b/157380488 )
  • From Lifecycle 2.5.1 : Custom implementations of AndroidViewModelFactory now correctly calls the create(modelClass) function when using the stateful constructor with Lifecycle 2.4+ ( I5b315 , b/238011621 )

Version 2.6.0-alpha01

29 июня 2022 г.

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

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

  • Added a new extension on StateFlow and Flow of collectAsStateWithLifecycle that collect from flows and represents its latest value as Compose State in a lifecycle-aware manner. The flow is collected and the new emission is set to the State's value when the lifecycle is at least in a certain Lifecycle.State . When the lifecycle falls below that Lifecycle.State , the flow collection stops and the State's value is not updated. ( I1856e , b/230557927 )

Version 2.5

Version 2.5.1

27 июля 2022 г.

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

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

  • Custom implementations of AndroidViewModelFactory now correctly call the create(modelClass) function when using the stateful AndroidViewModelFactory constructor with Lifecycle 2.4+. ( I5b315 , b/238011621 )

Version 2.5.0

29 июня 2022 г.

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

Important changes since 2.4.0

  • SavedStateHandle now offers a getStateFlow() API that returns a Kotlin StateFlow for monitoring value changes as an alternative to using LiveData .

  • ViewModel CreationExtras - when writing a custom ViewModelProvider.Factory , it is no longer required to extend AndroidViewModelFactory or AbstractSavedStateViewModelFactory to gain access to an Application or SavedStateHandle , respectively. Instead, these fields are provided to every ViewModelProvider.Factory subclass as CreationExtras via the new overload of create : create(Class<T>, CreationExtras) . These extras are provided automatically by your Activity or Fragment when using Activity 1.5.0 and Fragment 1.5.0 , respectively.

    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 now provides a viewModelFactory Kotlin DSL that allows you define your ViewModelProvider.Factory in terms of one or more lambda initializers, one for each particular ViewModel class your custom factory supports, using CreationExtras as the primary data source.

    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 now offers a viewModel() API that takes a lambda factory for creating a ViewModel instance without requiring the creation of a custom ViewModelProvider.Factory .

    // Within a @Composable, you can now skip writing a custom Factory
    // and instead write a lambda to do the initialization of your ViewModel
    val detailViewModel = viewModel {
      // This lambda is only called the first time the ViewModel is created
      // and all CreationExtras are available inside the lambda
      val savedStateHandle = createSavedStateHandle()
      DetailViewModel(savedStateHandle)
    }
    
  • SavedStateHandle Compose Saver Integration - the lifecycle-viewmodel-compose artifact now contains new experimental APIs in SavedStateHandle.saveable that allow rememberSaveable like behavior backed by the SavedStateHandle of a `ViewModel.

    class ListScreenViewModel(handle: SavedStateHandle): ViewModel() {
        // This value survives both configuration changes and process death and recreation
        val editMode by handle.saveable { mutableStateOf(false) }
    }
    
  • Added an addCloseable() API and a new constructor overload that allow you to add one or more Closeable objects to the ViewModel that will be closed when the ViewModel is cleared without requiring any manual work in onCleared() .

    For instance, to create a coroutine scope that you can inject into a ViewModel, but control via testing, you can create a CoroutineScope that implements Closeable :

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

    Which can then be used in your ViewModel constructor while maintaining the same lifetime as viewModelScope :

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

Behavior changes

  • Attempting to move the Lifecycle.State from INITIALIZED to DESTROYED will now always throw an IllegalStateException regardless of whether the Lifecycle has an attached observer.
  • LifecycleRegistry will now clear their observers when they reach the DESTROYED state.

Version 2.5.0-rc02

June 15, 2022

androidx.lifecycle:lifecycle-*:2.5.0-rc02 is released. Version 2.5.0-rc02 contains these commits.

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

  • ViewModelProvider will no longer crash when mixing previous versions of compileOnly Lifecycle dependencies with versions 2.5+. ( I81a66 , b/230454566 )

Version 2.5.0-rc01

11 мая 2022 г.

androidx.lifecycle:lifecycle-*:2.5.0-rc01 is released. Version 2.5.0-rc01 contains these commits.

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

  • MediatorLiveData.addSource() now throws a NullPointerException when passed a null source instead of propagating the null source to observers.( Ibd0fb , b/123085232 )

Version 2.5.0-beta01

April 20, 2022

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

Изменения API

  • Added SavedStateHandle.saveable property delegates to use property names as keys for persisting state into the SavedStateHandle ( I8bb86 , b/225014345 )

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

  • Fixed an issue where nesting one NavHost within another NavHost in a non-primary bottom navigation tab would lead to an IllegalStateException when using multiple back stacks. ( I11bd5 , b/228865698 )

Version 2.5.0-alpha06

6 апреля 2022 г.

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

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

  • Add experimental MutableState overload to SavedStateHandle.saveable for parity with rememberSaveable ( I38cfe , b/224565154 )

Изменения API

  • CreationExtras is now abstract instead of sealed. ( Ib8a7a )

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

  • Fixed an IllegalStateException: Already attached to lifecycleOwner error caused by SavedStateHandleController . ( I7ea47 , b/215406268 )

Version 2.5.0-alpha05

23 марта 2022 г.

androidx.lifecycle:lifecycle-*:2.5.0-alpha05 is released. Version 2.5.0-alpha05 contains these commits.

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

  • The lifecycle-viewmodel-compose module now provides SavedStateHandleSaver , an experimental API that ensures values in a SavedStateHandle are integrated correctly with the same saved instance state that rememberSaveable uses. ( Ia88b7 , b/195689777 )

Изменения API

  • Fixed a compatibility issue with Lifecycle 2.3 and newer Lifecycle versions in Java. ( I52c8a , b/219545060 )

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

  • SavedStateViewFactory now supports using CreationExtras even when it was initialized with a SavedStateRegistryOwner . If extras are provided, the initialized arguments are ignored. ( I6c43b , b/224844583 )

Version 2.5.0-alpha04

9 марта 2022 г.

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

Изменения API

  • SavedStateHandle now offers a getStateFlow() API that returns a Kotlin StateFlow for monitoring value changes as an alternative to using LiveData . ( Iad3ab , b/178037961 )

Version 2.5.0-alpha03

23 февраля 2022 г.

androidx.lifecycle:lifecycle-*:2.5.0-alpha03 is released. Version 2.5.0-alpha03 contains these commits.

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

  • Added an addCloseable() API and a new constructor overload that allow you to add one or more Closeable objects to the ViewModel that will be closed when the ViewModel is cleared without requiring any manual work in onCleared() . ( I55ea0 )
  • lifecycle-viewmodel now provides an InitializerViewModelFactory that allows you to add lambda for handling particular ViewModel classes, using CreationExtras as the primary data source. ( If58fc , b/216687549 )
  • lifecycle-viewmodel-compose now offers a viewModel() API that takes a lambda factory for creating a ViewModel instance without requiring the creation of a custom ViewModelProvider.Factory . ( I97fbb , b/216688927 )

Изменения API

  • You can now create a ViewModel with CreationExtras via lifecycle-viewmodel-compose . ( I08887 , b/216688927 )

Behavior changes

  • Attempting to move the Lifecycle.State from INITIALIZED to DESTROYED will now always throw an IllegalStateException regardless of whether the Lifecycle has an attached observer. ( I7c390 , b/177924329 )
  • LifecycleRegistry will now clear their observers when they reach the DESTROYED state. ( I4f8dd , b/142925860 )

Version 2.5.0-alpha02

9 февраля 2022 г.

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

Изменения API

  • SavedStateHandle and SavedStateViewModelFactory have been converted to Kotlin. This has improved the nullability of the generics in both classes. ( Ib6ce2 , b/216168263 , I9647a , b/177667711 )
  • The LiveData switchMap function parameter can now have a nullable output. ( I40396 , b/132923666 )
  • The LiveData -ktx extensions are now annotated with @CheckResult to enforce that the result is used when calling these functions. ( Ia0f05 , b/207325134 )

Behavior changes

  • SavedStateHandle now properly stores the defaultValue when no value for the specified key exists. ( I1c6ce , b/178510877 )

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

  • From Lifecycle 2.4.1 : Updated lifecycle-process to depend on Startup 1.1.1 to ensure that fixes that prevent ProcessLifecycleInitializer from throwing a StartupException are available by default. ( Ib01df , b/216490724 )
  • There is now an improved error message when custom AndroidViewModel classes have parameters in the wrong order and attempt to create a ViewModel . ( I340f7 , b/177667711 )
  • You can now create a view model via CreationExtras using the AndroidViewModelFactory without setting an application. ( I6ebef , b/217271656 )

Version 2.5.0-alpha01

26 января 2022 г.

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

ViewModel CreationExtras

With this release, we are laying the groundwork for restructuring how a ViewModel is constructed. Instead of a rigid set of subclasses of ViewModelProvider.Factory that each add additional functionality (allowing an Application constructor parameter via AndroidViewModelFactory , allowing a SavedStateHandle constructor parameter via SavedStateViewModelFactory and AbstractSavedStateViewModelFactory , etc.), we are moving to a world of stateless factories that rely on a new concept, CreationExtras . ( Ia7343 , b/188691010 , b/188541057 )

With this change, ViewModelProvider no longer makes direct calls into the previous create(Class<T>) method of ViewModelProvider.Factory . Instead, it calls into a new overload of create : create(Class<T>, CreationExtras) . This means that any direct implementation of the ViewModelProvider.Factory instance now has access to each of these new CreationExtras :

  • ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY : this String provides access to the custom key you passed to ViewModelProvider.get() .
  • ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY provides access to the Application class.
  • SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY provides access to the SavedStateRegistryOwner that is being used to construct this ViewModel.
  • SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY provides access to the ViewModelStoreOwner that is being used to construct this ViewModel.
  • SavedStateHandleSupport.DEFAULT_ARGS_KEY provides access to the Bundle of arguments that should be used to construct a SavedStateHandle .

These extras are provided by default when using Activity 1.5.0-alpha01 , Fragment 1.5.0-alpha01 , and Navigation 2.5.0-alpha01 . If you use an earlier version of those libraries, your CreationExtras will be empty - all of the existing subclasses of ViewModelProvider.Factory have been rewritten to support both the legacy creation path used by earlier versions of those libraries and the CreationExtras path which will be used идем вперед.

These CreationExtras allow you to construct a ViewModelProvider.Factory that passes just the information you need to each ViewModel without relying on a strict hierarchy of Factory subclasses:

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

We use the createSavedStateHandle() Kotlin extension function on CreationExtras from SavedStateHandleSupport to construct a SavedStateHandle only for the one ViewModel that needs it. ( Ia6654 , b/188541057 )

Custom CreationExtras can be provided by overriding getDefaultViewModelCreationExtras() in your ComponentActivity or Fragment , thus making them available to your custom ViewModelProvider.Factory as a built in form of assisted injection. These extras will automatically be made available to your custom Factory when used directly with ViewModelProvider or when using the by viewModels() and by activityViewModels() Kotlin property extensions. ( I79f2b , b/207012584 , b/207012585 , b/207012490 )

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

  • Fixed an issue where the default value provided to a SavedStateHandle would reappear after process death and recreation, even if it was specifically removed from the SavedStateHandle . As a consequence of this, SavedStateHandle will no longer merge default values and restored values together, instead only using the restored values as the source of truth. ( I53a4b )

Version 2.4

Version 2.4.1

9 февраля 2022 г.

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

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

  • Backported from Lifecycle 2.5.0-alpha01 : Fixed an issue where the default value provided to a SavedStateHandle would re-appear after process death and recreation, even if it was specifically removed from the SavedStateHandle . As a consequence of this, SavedStateHandle will no longer merge default values and restored values together, instead only using the restored values as the source of truth. ( I53a4b )
  • lifecycle-process now depends on Androidx Startup 1.1.1 which fixed a regression in where using ProcessLifecycleInitializer would cause an StartupException . ( b/216490724 )

Version 2.4.0

27 октября 2021 г.

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

Important changes since 2.3.0

  • @OnLifecycleEvent was deprecated. LifecycleEventObserver or DefaultLifecycleObserver should be used instead.
  • androidx.lifecycle:lifecycle-viewmodel-compose library was added. It provides viewModel() composable and LocalViewModelStoreOwner .
    • Source-breaking change : ViewModelProvider has been rewritten in Kotlin. ViewModelProvider.Factory.create method no longer allows nullable generic.
  • New coroutines API were added to androidx.lifecycle:lifecycle-runtime-ktx :
  • Lifecycle.repeatOnLifecycle , API that executes a block of code in a coroutine when the Lifecycle is at least in a certain state. The block will cancel and re-launch as the lifecycle moves in and out of the target state;
  • Flow.flowWithLifecycle , API that emits values from the upstream Flow when the lifecycle is at least in a certain state.
  • DefaultLifecycleObserver was moved from lifecycle.lifecycle-common-java8 to lifecycle.lifecycle-common . lifecycle.lifecycle-common-java8 doesn't provide anymore any additional functionality on top of lifecycle.lifecycle-common , so dependency on it can be replaced by lifecycle.lifecycle-common .
  • Non coroutines API from lifecycle-viewmodel-ktx have been moved to the lifecycle-viewmodel module.
  • 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>
    

Version 2.4.0-rc01

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

androidx.lifecycle:lifecycle-*:2.4.0-rc01 is released with no changes from Lifecycle 2.4.0-beta01. Version 2.4.0-rc01 contains these commits.

Version 2.4.0-beta01

September 15, 2021

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

Изменения API

  • @OnLifecycleEvent was deprecated. LifecycleEventObserver or DefaultLifecycleObserver should be used instead. ( I5a8fa )
  • DefaultLifecycleObserver was moved from androidx.lifecycle.lifecycle-common-java8 to androidx.lifecycle.lifecycle-common . androidx.lifecycle.lifecycle-common-java8 doesn't provide anymore any additional functionality on top of androidx.lifecycle.lifecycle-common , so dependency on it can be replaced by androidx.lifecycle.lifecycle-common . ( I021aa )
  • Non coroutines API from lifecycle-viewmodel-ktx have been moved to the lifecycle-viewmodel module. ( I6d5b2 )

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

  • Thanks dmitrilc for fixing a type in the ViewModel documentation! ( #221 )

Version 2.4.0-alpha03

August 4, 2021

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

Изменения 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

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

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 )

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

June 2, 2021

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

Updated to be compatible with Compose version 1.0.0-beta08 .

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

18 мая 2021 г.

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

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

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

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

April 7, 2021

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

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.

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

March 10, 2021

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

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

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

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

  • The viewModel() composable and LocalViewModelStoreOwner were moved from androidx.compose.ui.viewinterop to this artifact in the androidx.lifecycle.viewmodel.compose package. ( I7a374 )

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

Version 2.3.0

Version 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

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

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

May 20, 2020

androidx.lifecycle:lifecycle-*:2.3.0-alpha03 are released. Version 2.3.0-alpha03 contains these commits.

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

  • SavedStateHandle now supports lazy serialization by allowing you to call setSavedStateProvider() for a given key, providing a SavedStateProvider that will get a callback to saveState() when the SavedStateHandle is asked to save its state. ( b/155106862 )
  • A new ViewTreeViewModelStoreOwner.get(View) API allows you to retrieve the containing ViewModelStoreOwner given a View instance. You must upgrade to Activity 1.2.0-alpha05 , Fragment 1.3.0-alpha05 , and AppCompat 1.3.0-alpha01 to populate this correctly. A findViewModelStoreOwner() Kotlin extension has been added to lifecycle-viewmodel-ktx . ( aosp/1295522 )

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

  • Fixed an issue that caused the MutableLiveData Lint checks released in Lifecycle 2.3.0-alpha01 from being published alongside the lifecycle-livedata-core-ktx artifact. ( b/155323109 )

Version 2.3.0-alpha02

29 апреля 2020 г.

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

Изменения API

  • SavedStateViewModelFactory now allows you to pass a null Application to its constructor to better support cases where one is not readily available and support for AndroidViewModel is not needed. ( aosp/1285740 )

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

  • Improved cold start performance by avoiding class verification failure on API 28 and lower devices. ( aosp/1282118 )

Version 2.3.0-alpha01

4 марта 2020 г.

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

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

  • A new ViewTreeLifecycleOwner.get(View) API allows you to retrieve the containing LifecycleOwner given a View instance. You must upgrade to Activity 1.2.0-alpha01 and Fragment 1.3.0-alpha01 to populate this correctly. A findViewTreeLifecycleOwner Kotlin extension is available in lifecycle-runtime-ktx . ( aosp/1182361 , aosp/1182956 )
  • Added a new Lint check that warns you when setting a null value on a MutableLiveData that has been defined in Kotlin as non-null. This is available when using the livedata-core-ktx or livedata-ktx artifacts. ( aosp/1154723 , aosp/1159092 )
  • A new lifecycle-runtime-testing artifact is available that provides a TestLifecycleOwner that implements LifecycleOwner and provides a thread safe mutable Lifecycle . ( aosp/1242438 )

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

  • The lifecycle-runtime artifact now has a unique package name. ( aosp/1187196 )

Version 2.2.0

ViewModel-Savedstate Version 2.2.0

5 февраля 2020 г.

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

Lifecycle ViewModel SavedState now shares the same version as other Lifecycle artifacts. The behavior of 2.2.0 is identical to the behavior of 1.0.0 .

Version 2.2.0

January 22, 2020

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

Important changes since 2.1.0

  • Lifecycle Coroutine Integration : The new lifecycle-runtime-ktx artifact adds integration between Lifecycle and Kotlin coroutines. The lifecycle-livedata-ktx has also been expanded to take advantage of coroutines. See Use Kotlin coroutines with Architecture Components for more details.
  • ViewModelProviders.of() deprecation : ViewModelProviders.of() has been deprecated. You can pass a Fragment or FragmentActivity to the new ViewModelProvider(ViewModelStoreOwner) constructor to achieve the same functionality when using Fragment 1.2.0 .
  • lifecycle-extensions Artifact Deprecation : With the above deprecation of ViewModelProviders.of() , this release marks the deprecation of the last API in lifecycle-extensions and this artifact should now be considered deprecated in its entirety. We strongly recommend depending on the specific Lifecycle artifacts you need (such as lifecycle-service if you're using LifecycleService and lifecycle-process if you're using ProcessLifecycleOwner ) rather than lifecycle-extensions as there will not be a future 2.3.0 release of lifecycle-extensions .
  • Gradle Incremental Annotation Processor : Lifecycle's annotation processor is incremental by default. If your app is written in the Java 8 programming language you can use DefautLifecycleObserver instead; and if it's written in the Java 7 programming language you can use LifecycleEventObserver .

Version 2.2.0-rc03

4 декабря 2019 г.

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

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

  • Fixed a failure occurring when a mocked ViewModel was stored in ViewModelStore and queried later with default factory.
  • Fix a usage of Dispatchers.Main.immediate in launchWhenCreated and similar methods to be called synchronously during corresponding lifecycle event. ( aosp/1156203 )

External contributions

  • Thanks to Anders Järleberg for contributing the fix! ( aosp/1156203 )
  • Thanks to Vsevolod Tolstopyatov from Jetbrains for reviewing an implementation of inlined execution.

Dependency changes

  • Lifecycle Extensions now depends on Fragment 1.2.0-rc03 .

Version 2.2.0-rc02

7 ноября 2019 г.

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

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

  • Fixed a bug in the proguard setup of the library that affected devices running API 28+ if the target API is below 29. ( b/142778206 )

Version 2.2.0-rc01

October 23, 2019

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

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

  • Fixed an issue where launchWhenCreated and related methods would run one frame later than the associated lifecycle method due to its use of Dispatchers.Main instead of Dispatchers.Main.immediate . ( aosp/1145596 )

External contributions

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

Version 2.2.0-beta01

9 октября 2019 г.

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

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

  • Fixed a regression introduced in Lifecycle 2.2.0-alpha05 in the ordering of ProcessLifecycleOwner and the activity's LifecycleOwner moving to started and resumed on Android 10 devices. ( aosp/1128132 )
  • Fixed a regression introduced in Lifecycle 2.2.0-alpha05 which would cause a NullPointerException when using version 2.0.0 or 2.1.0 of lifecycle-process . ( b/141536990 )

Version 2.2.0-alpha05

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

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

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

  • Fixed a race condition in coroutine livedata builder. b/140249349

Version 2.2.0-alpha04

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

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

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

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

External contributions

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

Version 2.2.0-alpha03

7 августа 2019 г.

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

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

Изменения API

  • 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

May 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

Version 1.0.0

January 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

October 23, 2019

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01 is released with no changes from 1.0.0-beta01 . Version 1.0.0-rc01 contains these commits .

ViewModel-Savedstate Version 1.0.0-beta01

9 октября 2019 г.

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

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

  • Fixed an issue where accessing a SavedState ViewModel for the first time in Activity.onActivityResult() would result in an IllegalStateException . ( b/139093676 )
  • Fixed an IllegalStateException when using AbstractSavedStateViewModelFactory . ( b/141225984 )

ViewModel-SavedState Version 1.0.0-alpha05

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

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

Изменения 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

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.

Version 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 .

Version 2.1.0

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

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

Version 2.1.0-rc01

2 июля 2019 г.

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

Version 2.1.0-beta01

May 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

January 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

December 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.

Version 2.0.0

Version 2.0.0

September 21, 2018

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

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

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

Version 2.0.0-beta01

July 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

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.
,

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

Lifecycle-aware components perform actions in response to a change in the lifecycle status of another component, such as activities and fragments. These components help you produce better-organized, and often lighter-weight code, that is easier to maintain.

This table lists all the artifacts in the androidx.lifecycle group.

Артефакт Стабильный выпуск Кандидат на выпуск Бета-версия Альфа-релиз
жизненный цикл-* 2.8.6 - - 2.9.0-alpha03
lifecycle-viewmodel-compose 2.8.6 - - 2.9.0-alpha03
This library was last updated on: September 18, 2024

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

To add a dependency on Lifecycle, you must add the Google Maven repository to your project. Для получения дополнительной информации прочтите репозиторий Google Maven .

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

Котлин

классный

    dependencies {
        def lifecycle_version = "2.8.7"
        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"

        // 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.8.7"
        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")

        // 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.8.7"
        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.8.7"
        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")
    }
    

For more information about dependencies, see Add Build Dependencies .

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

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

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

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

Version 2.9

Version 2.9.0-alpha03

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

androidx.lifecycle:lifecycle-*:2.9.0-alpha03 is released. Version 2.9.0-alpha03 contains these commits .

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

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

Version 2.9.0-alpha02

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

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

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

  • From Lifecycle 2.8.5 : Update the androidx.lifecycle.ReportFragment ProGuard rules to allow obfuscation . ( ff898e1 )

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

  • Move androidx.compose.ui.platform.LocalLifecycleOwner to common source set (KMP). Thanks Ivan Matkov from JetBrains for the contribution. ( 8cd5d03 )
  • From Lifecycle 2.8.5 : SavedStateHandle.saveable` extension delegate now supports nullable values. Thanks Roman Kalukiewicz for the contribution. ( 0d78ea6 )

Version 2.9.0-alpha01

7 августа 2024 г.

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

Kotlin Multiplatform

  • lifecycle-testing is now KMP compatible. ( Iea41e )
  • Add support for linuxArm64 kotlin multiplatform target ( I139d3 , b/338268719 )

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

  • A new androidx.lifecycle:lifecycle-viewmodel-testing KMP artifact is available that provides a ViewModelScenario class for testing ViewModels in isolation, with support for onCleared (all platforms) and SavedStateHandle (Android only). ( 337f68d , c9b3409 , 9799a95c , b/264602919 )
  • Creating a ViewModel with ViewModelProvider is now thread safe; @MainThread annotations have been removed. ( Ifd978 , b/237006831 )

Изменения API

  • Add the CreationExtras.Key() factory function to simplify the creation of anonymous CreationExtras.Key objects. ( I970ee )
  • CreationExtras now includes map-like operator overloads to enable idiomatic manipulation of content in Kotlin. It allows the use of in , += , and + with CreationExtras . ( Ib4353 )
  • CreationExtras now implements equals , hashCode , and toString methods. ( Ib4353 )
  • NewInstanceFactory is now available on JVM Desktop and Android targets. ( d3d0892 )
  • Inline extension property to expose underlying Application safely in Kotlin language version 2.0 ( I39df2 )

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

  • Removed manual outlining of access to new platform APIs since this happens automatically via API modeling when using R8 with AGP 7.3 or later (eg R8 version 3.3) and for all builds when using AGP 8.1 or later (eg D8 version 8.1). Clients who are not using AGP are advised to update to D8 version 8.1 or later. See this article for more details. ( If6b4c , b/345472586 )

Version 2.8

Version 2.8.6

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

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

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

  • The NullSafeMutableLiveData Lint error has improved support for smart casts, avoiding false positives. ( 85fed6 , b/181042665 )

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

Version 2.8.5

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

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

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

  • Update the androidx.lifecycle.ReportFragment ProGuard rules to allow obfuscation . ( ff898e1 )

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

  • SavedStateHandle.saveable extension delegate now supports nullable values. Thanks Roman Kalukiewicz for the contribution. ( 0d78ea6 )

Version 2.8.4

24 июля 2024 г.

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

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

  • LiveData.asFlow() now correctly handles cases where the returned Flow is immediately completed after receiving a value already set on the LiveData (for example, when using take(1) ). ( I9c566 )
  • Lifecycle*Effect completion is now idempotent (ie, if the onStopOrDispose was called because of the Lifecycle being stopped, it won't be called a second time upon disposal unless the Lifecycle goes back up to STARTED again). ( I5f607 , b/352364595 )

Version 2.8.3

1 июля 2024 г.

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

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

  • Fixed an issue with Lifecycle 2.8's backward compatibility with Compose 1.6.0 and lower when using code shrinking. ( aosp/3133056 , b/346808608 )

Version 2.8.2

12 июня 2024 г.

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

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

  • Fixed CompositionLocal LocalLifecycleOwner not present errors when using Lifecycle 2.8.X with Compose 1.6.X or earlier - you can now use Lifecycle 2.8.2 with any version of Compose without any workarounds required. ( aosp/3105647 , b/336842920 )
  • ViewModelProvider will no longer crash when mixing previous versions of compileOnly Lifecycle dependencies with versions 2.8+, fixing issues with libraries such as LeakCanary. ( I80383 , b/341792251 )

Version 2.8.1

29 мая 2024 г.

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

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

  • lifecycle-viewmodel-compose now only has a common dependency on compose-runtime , removing its common dependency on compose-ui . The Android artifact retains its compose-ui for compatibility. ( aosp/3079334 , b/339562627 )
  • ViewModel 's saveable integration using property delegates now uses the class name as part of the auto-generated key, avoiding conflicts if multiple classes use the same SavedStateHandle . ( aosp/3063463 )

Version 2.8.0

14 мая 2024 г.

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

Important changes since 2.7.0

  • LocalLifecycleOwner has been moved from Compose UI to lifecycle-runtime-compose so that its Compose-based helper APIs can be used outside of Compose UI.
  • The lifecycle-runtime-compose artifact now contains the dropUnlessResumed and dropUnlessStarted APIs which allow you to drop click or other events that occur even after the LifecycleOwner has dropped below the given Lifecycle.State . For example, this can be used with Navigation Compose to avoid handling click events after a transition to another screen has already begun: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
  • ViewModel.viewModelScope is now an overridable constructor parameter, allowing you to inject your own dispatcher and SupervisorJob() or to override the default by using the backgroundScope available within 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 has been rewritten in Kotlin and now uses AutoClosable instead of Closeable . It now supports adding AutoCloseable objects with a key that allows retrieving them via getCloseable() .

  • Calling LifecycleStartEffect and LifecycleResumeEffect without a key is now an error, following the same convention as the DisposableEffect API that these APIs mirror.

  • Deprecated LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) in favor of LiveData.toPublisher(lifecycleOwner) .

  • The lifecycle-livedata-core-ktx kotlin extensions have now been moved to the lifecycle-livedata-core module.

  • The NullSafeMutableLiveData has been refactored to avoid many false positives.

Lifecycle Kotlin Multiplatform Compatibility

The core Lifecycle APIs in Lifecycle , LifecycleOwner , LifecycleObserver , Lifecycle.State , Lifecycle.Event , and LifecycleRegistry are now shipped in artifacts compatible with Kotlin Multiplatform.

Artifacts impacted:

  • lifecycle-common moves most APIs to common and supports jvm and iOS in addition to Android.
  • lifecycle-runtime moves most APIs to common and supports jvm and iOS in addition to Android.
  • lifecycle-runtime-ktx is now empty, with all APIs being moved into lifecycle-runtime .
  • lifecycle-runtime-compose moves all APIs to common and ships an Android artifact, matching the multiplatform support of androidx.compose .

ViewModel Kotlin Multiplatform Compatibility

The lifecycle-viewmodel artifact and APIs like ViewModel , ViewModelStore , ViewModelStoreOwner , and ViewModelProvider are now shipped in artifacts compatible with Kotlin Multiplatform.

To accommodate this change, methods such as those on ViewModelProvider that took a java.lang.Class<T> now have an equivalent method that takes a kotlin.reflect.KClass<T> .

Binary compatibility on Android has been maintained, but there are a few notable changes when comparing the Android API surface to the common API surface:

  • Constructing a ViewModelProvider instance is now done through the ViewModelProvider.create() methods rather than directly calling its constructor.
  • ViewModelProvider.NewInstanceFactory and ViewModelProvider.AndroidViewModelFactory are only available on Android.
    • Custom Factories are recommended to extend from ViewModelProvider.Factory and use the create method that takes a CreationExtras or use the viewModelFactory Kotlin DSL.
  • Using ViewModelProvider without a custom factory on non-JVM platforms will result in an UnsupportedOperationException . On JVM platforms, compatibility is preserved by using the no-args ViewModel constructor if a custom factory is not provided.
  • viewModelScope will fallback to an EmptyCoroutineContext in platforms where Dispatchers.Main is not available (eg, Linux).

Artifacts impacted:

  • lifecycle-viewmodel moves most APIs to common and supports jvm and iOS in addition to Android.
  • lifecycle-viewmodel-ktx is now empty, with all APIs being moved into lifecycle-viewmodel .
  • lifecycle-viewmodel-compose moves all APIs to common and ships an Android artifact, matching the multiplatform support of androidx.compose .

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

  • InitializerViewModelFactory (including viewModelFactory builder function) will now throw an IllegalArgumentException if a initializer with the same clazz: KClass<VM : ViewModel> has already been added. ( Ic3a36 )

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

Version 2.8.0-rc01

1 мая 2024 г.

androidx.lifecycle:lifecycle-*:2.8.0-rc01 is released. Version 2.8.0-rc01 contains these commits .

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

  • Fixed an issue where the Baseline Profile for lifecycle-common classes was not properly packaged. These are now packaged in the lifecycle-runtime AAR. ( aosp/3038274 , b/322382422 )
  • Fixed an unintentional ordering change in how AutoCloseable instances attached to a ViewModel are cleared - the previous order of addCloseable(String, AutoCloseable) , then addClosable(AutoCloseable) , then onCleared() has been restored. ( aosp/3041632 )
  • Improve the default creation behavior for viewModelScope for native and JVM Desktop environments. ( aosp/3039221 )

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

  • Thanks Victor Kropp for improving the checking for the main thread on JVM Desktop. ( aosp/3037116 )

Version 2.8.0-beta01

17 апреля 2024 г.

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

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

  • The lifecycle-runtime-compose artifact is now compatible with Kotlin Multiplatform, moving its code to common and ships an Android artifact, matching the multiplatform support for androidx.compose . ( If7a71 , I4f4a0 , b/331769623 )

Version 2.8.0-alpha04

3 апреля 2024 г.

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

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

  • The lifecycle-viewmodel-compose artifact is now compatible with Kotlin Multiplatform, moving its code to common and ships an Android artifact, matching the multiplatform support of androidx.compose . The accommodate this change, the Composable viewModel method now accepts a KClass in addition to a java.lang.Class . ( b/330323282 )

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

Dependency update

  • The lifecycle-viewmodel-compose artifact now depends on Compose 1.6.0.
  • Lifecycle now depends on Profile Installer 1.3.1 .

Version 2.8.0-alpha03

20 марта 2024 г.

androidx.lifecycle:lifecycle-*:2.8.0-alpha03 is released. Version 2.8.0-alpha03 contains these commits .

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

  • ViewModel.viewModelScope is now an overridable constructor parameter, allowing you to inject your own dispatcher and SupervisorJob() or to override the default by using the backgroundScope available within 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 Multiplatform Compatibility

The lifecycle-viewmodel artifact and APIs like ViewModel , ViewModelStore , ViewModelStoreOwner , and ViewModelProvider are now shipped in artifacts compatible with Kotlin Multiplatform. ( b/214568825 )

To accommodate this change, methods such as those on ViewModelProvider that took a java.lang.Class<T> now have an equivalent method that takes a kotlin.reflect.KClass<T> .

Binary compatibility on Android has been maintained, but there are a few notable changes when comparing the Android API surface to the common API surface:

  • Constructing a ViewModelProvider instance is now done through the ViewModelProvider.create() methods rather than directly calling its constructor.
  • ViewModelProvider.NewInstanceFactory and ViewModelProvider.AndroidViewModelFactory are only available on Android.
    • Custom Factories are recommended to extend from ViewModelProvider.Factory and use the create method that takes a CreationExtras or use the viewModelFactory Kotlin DSL.
  • Using ViewModelProvider without a custom factory on non-JVM platforms will result in an UnsupportedOperationException . On JVM platforms, compatibility is preserved by using the no-args ViewModel constructor if a custom factory is not provided.
  • viewModelScope will fallback to an EmptyCoroutineContext in platforms where Dispatchers.Main is not available (eg, Linux).

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

  • InitializerViewModelFactory (including viewModelFactory builder function) will now throw an IllegalArgumentException if a initializer with the same clazz: KClass<VM : ViewModel> has already been added. ( Ic3a36 )

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

  • ViewModel.getCloseable now handles duplicated keys: if the key already has an AutoCloseable resource associated with it, the old resource will be replaced and closed immediately. ( Ibeb67 )
  • Accessing the viewModelScope of a ViewModel is now thread safe. ( If4766 , b/322407038 )

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

  • LocalLifecycleOwner moved from Compose UI to lifecycle-runtime-compose so that its Compose-based helper APIs can be used outside of Compose UI. Thanks Jake Wharton for the contribution. ( I6c41b , b/328263448 )

Version 2.8.0-alpha02

21 февраля 2024 г.

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

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

  • The dropUnlessResumed and dropUnlessStarted APIs have been added which allow you to drop click or other events that occur even after the LifecycleOwner has dropped below the given Lifecycle.State . For example, this can be used with Navigation Compose to avoid handling click events after a transition to another screen has already begun: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) } ( Icba83 , b/317230685 )

Kotlin Conversions

  • ViewModel is now written in Kotlin ( I16f26 , b/214568825 )
  • The lifecycle-viewmodel-ktx kotlin extensions have now been moved to the base lifecycle module. ( Id787b , b/274800183 )
  • The lifecycle-runtime-ktx kotlin extensions have now been moved to the base lifecycle module. ( Ic3686 , b/274800183 )
  • The lifecycle-livedata-core-ktx kotlin extensions have now been moved to the base lifecycle module. ( I54a3d , b/274800183 )

Kotlin Multiplatform Compatibility

  • The core Lifecycle APIs in Lifecycle , LifecycleOwner , LifecycleObserver , Lifecycle.State , Lifecycle.Event , and LifecycleRegistry are now shipped in artifacts compatible with Kotlin Multiplatform. ( b/317249252 )

Изменения API

  • Calling LifecycleStartEffect and LifecycleResumeEffect without a key is now an error, following the same convention as the DisposableEffect API that these APIs mirror. ( Ib0e0c , b/323518079 )
  • ViewModel now uses AutoCloseable instead of Closeable . That is a backward compatible change. ( I27f8e , b/214568825 )
  • Deprecated LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) in favor of LiveData.toPublisher(lifecycleOwner) . ( Iabe29 , b/262623005 )

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

  • Thanks Ivan Matkov from Jetbrains for helping move Lifecycle to Kotlin Multiplatform. ( aosp/2926690 , I0c5ac , If445d )

Version 2.8.0-alpha01

24 января 2024 г.

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

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

  • ViewModel now supports adding Closeable objects with a key that allows retrieving them via getCloseable() . ( I3cf63 )

Version 2.7

Version 2.7.0

10 января 2024 г.

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

Important changes since 2.6.0

  • TestLifecycleOwner now includes a suspending function setCurrentState() which ensures that the state change and all LifecycleObserver callbacks are completed before returning. Notably, unlike setting the currentState property directly, this does not use runBlocking , making it safe to use within a coroutine such as one provided by runTest .
  • The LiveData extensions of map and switchMap now mirror the behavior of distinctUntilChanged - if the LiveData has a value set, the map / switchMap function will be immediately called to populate the value of the returned LiveData . This ensures that the initial value will be set as part of the first composition (when used with observeAsState() ), but does not change the observation behavior - updates values from the source LiveData will still only apply once you start observing the LiveData .
  • This release fixes an issue where SavedStateHandle would not properly restore custom Parcelable classes after process death and recreation. Due to type information that is lost by the Android framework, arrays of custom Parcelables require additional work (manually creating a typed array of the right type) and the documentation on get , getLiveData , and getStateFlow now specifically calls this limitation out.
  • The proguard keep rules associated with LifecycleObserver have been removed. This means that proguarded code that wishes to use APIs via reflection (such as using the long since deprecated @OnLifecycleEvent annotation) will need to provide their own keep rules for their specific use case.

Lifecycle Event Observability

  • As an alternative to using a LifecycleEventObserver , you can now observe a Flow of Lifecycle.Event via the Lifecycle.asFlow() extension method.
  • Jetpack Compose users can now use LifecycleEventEffect to run Compose side effects based on Lifecycle.Event .
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
    viewModel.refreshData()
  }
  // …
}
  • Jetpack Compose users can use LifecycleStartEffect and LifecycleResumeEffect to handle pairs of events - started to stopped and resumed to paused, respectively. This API mirrors the one found in DisposableEffect and is suitable for cases where the change being made when the state is going up needs to be reversed when going back down.
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleStartEffect(viewModel) {
    val timeTracking = viewModel.startTrackingTimeOnScreen()
    onStopOrDispose {
      timeTracking.stopTrackingTimeOnScreen()
    }
  }
  // …
}

See Run code on lifecycle events for more information.

Lifecycle State Observability

  • The current Lifecycle.State can now be observed via the Lifecycle.currentStateFlow property, which returns a StateFlow where the value is the current Lifecycle.State .
  • Jetpack Compose users can use the Lifecycle.currentStateAsState() extension to directly expose Lifecycle.State as Compose State . This is equivalent (and a shorter alternative) to lifecycle.currentStateFlow.collectAsState() .

See Collect lifecycle state with flows for more information.

Version 2.7.0-rc02

13 декабря 2023 г.

androidx.lifecycle:lifecycle-*:2.7.0-rc02 is released. Version 2.7.0-rc02 contains these commits.

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

  • Fixed an issue where SavedStateHandle would not properly restore custom Parcelable classes after process death and recreation. Due to type information that is lost by the Android framework, arrays of custom Parcelables require additional work (manually creating a typed array of the right type) and the documentation on get , getLiveData , and getStateFlow now specifically calls this limitation out. ( I0b55a )

Version 2.7.0-rc01

15 ноября 2023 г.

androidx.lifecycle:lifecycle-*:2.7.0-rc01 is released. Version 2.7.0-rc01 contains these commits.

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

  • LifecycleStartEffect and LifecycleResumeEffect now correctly dispose and recreate the effect block if the LifecycleOwner is changed. ( Ia25c6 )

Version 2.7.0-beta01

1 ноября 2023 г.

androidx.lifecycle:lifecycle-*:2.7.0-beta01 is released with no changes. Version 2.7.0-beta01 contains these commits.

  • A beta version bump, no major changes to this release version.

Version 2.7.0-alpha03

18 октября 2023 г.

androidx.lifecycle:lifecycle-*:2.7.0-alpha03 is released. Version 2.7.0-alpha03 contains these commits.

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

  • lifecycle-runtime-testing now contains a new Lint check to avoid setting the Lifecycle.State of the TestLifecycleOwner by using the currentState field when inside of a coroutine. The Lint check now suggests the suspending setCurrentState which allows setting the Lifecycle.State without blocking. ( Icf728 , b/297880630 )

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

  • Fixed an issue with LiveData.switchMap where returning the same LiveData instance both on the initial call and a subsequent call would prevent the LiveData instance from being added as a source. ( Ibedcba7 )

Version 2.7.0-alpha02

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

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

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

  • TestLifecycleOwner now includes the suspending function setCurrentState() to give users the option of using TestLifecycleOwner from within a coroutine such as one provided by runTest . ( I329de , b/259344129 )

Изменения API

  • All files from the lifecycle-livedata-ktx modules have been moved into the main lifecycle-livedata module. ( I10c6f , b/274800183 )

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

  • The LiveData.map() and LiveData.switchMap() extensions now sets the value of the returned LiveData if the previous LiveData has had a value set on it, ensuring that using the resulting LiveData in Jetpack Compose has the right state on the initial composition . ( I91d2b , b/269479952 )
  • ViewModel 's addCloseable() now immediately closes the Closeable if the ViewModel has already received a call to onCleared() . ( I4712e , b/280294730 )

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

  • From Lifecycle 2.6.2 : Fixed an issue where SavedStateHandle would not correctly be restored after process death if the state was restored, save() was called without actually saving the state in the parent SavedStateRegistry , and then the state was restored again. This fixes the interaction between rememberSaveable and Navigation Compose's NavHost . ( aosp/2729289 )

Version 2.7.0-alpha01

26 июля 2023 г.

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

Изменения API

  • Lifecycle.State is now Compose-observable via Lifecycle.currentStateFlow , which returns a StateFlow where the value is the current Lifecycle.State . ( Ib212d , b/209684871 )
  • Lifecycle.Event s can now able to be observed as a Flow with Lifecycle.asFlow(). ( If2c0f , b/176311030 )
  • LifecycleResumeEffect API has been added to run Compose SideEffect s based on both Lifecycle.Event.ON_RESUME and Lifecycle.Event.ON_PAUSE event callbacks. ( I60386 , b/235529345 )
  • LifecycleStartEffect API has been added to run Compose SideEffect s based on Lifecycle.Event.ON_START and Lifecycle.Event.ON_STOP event callbacks. ( I5a8d1 , b/235529345 )
  • LifecycleEventEffect API has been added to run Compose SideEffect s based on Lifecycle.Event . ( Ic9794 , b/235529345 )
  • Lifecycle.collectAsState() extension has been added to directly expose Lifecycle.State as Compose State . This is equivalent (and a shorter alternative) to lifecycle.currentStateFlow.collectAsState() . ( I11015 , b/235529345 )

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

  • The LiveData.distinctUntilChanged() extension now sets the value of the returned LiveData if the previous LiveData has had a value set on it. This does not change the observation behavior - updated values from the source LiveData will still only apply once you start observing the LiveData returned from distinctUntilChanged() . ( Ib482f )
  • The proguard keep rules associated with LifecycleObserver have been removed. This means that proguarded code that wishes to use APIs via reflection will need to provide their own keep rules for their specific use case. ( Ia12fd )

Version 2.6

Version 2.6.2

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

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

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

  • Fixed an issue where SavedStateHandle would not correctly be restored after process death if the state was restored, save() was called without actually saving the state in the parent SavedStateRegistry , and then the state was restored again. This fixes the interaction between rememberSaveable and Navigation Compose's NavHost . ( aosp/2729289 )

Version 2.6.1

22 марта 2023 г.

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

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

Version 2.6.0

8 марта 2023 г.

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

Important changes since 2.5.0

  • LiveData now includes a new isInitialized property that indicates whether an explicit value has ever been set on the LiveData , allowing you to distinguish between liveData.value returning null because no value has ever been set or an explicit null value.
  • MediatorLiveData now includes a constructor to set an initial value.
  • Added a new extension on StateFlow and Flow of collectAsStateWithLifecycle() that collect from flows and represents its latest value as Compose State in a lifecycle-aware manner.
  • Lifecycle.launchWhenX methods and Lifecycle.whenX methods have been deprecated as the use of a pausing dispatcher can lead to wasted resources in some cases. It is recommended to use Lifecycle.repeatOnLifecycle . For more information about one-time suspending work, please see this explanation on why this is inherently unsafe.
  • Kotlin Conversion - A large number of Lifecycle classes have been converted to Kotlin. All converted classes still retain their binary compatibility with previous versions. The following classes have source incompatible changes for classes written in Kotlin: ViewTreeLifecycleOwner , LiveDataReactiveStreams , HasDefaultViewModelProviderFactory , ViewTreeViewModelStoreOwner , Transformations , ViewModelStoreOwner , LifecycleOwner

The table below provides the source conversions for the new version of lifecycle.

Lifecycle 2.5 Lifecycle 2.5 (KTX) Lifecycle 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
  • The nullability of the onChanged method of a Observer created in Kotlin now matches the nullability of the generic type. If you want Observer.onChanged() to accept a nullable type, you must instantiate the Observer with a nullable type.
  • These classes were also converted to Kotlin, but remain source compatible: DefaultLifecycleObserver , LifecycleEventObserver , Lifecycle , LifecycleRegistry , LifecycleObserver , ViewModelStore , AndroidViewModel , AbstractSavedStateViewModelFactory , LifecycleService , ServiceLifecycleDispatcher , and ProcessLifecycleOwner

Version 2.6.0-rc01

22 февраля 2023 г.

androidx.lifecycle:lifecycle-*:2.6.0-rc01 is released. Version 2.6.0-rc01 contains these commits.

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

  • The LiveData.distinctUntilChanged() extension now sets the value of the returned LiveData if the previous LiveData has had a value set on it. This does not change the observation behavior - updated values from the source LiveData will still only apply once you start observing the LiveData returned from distinctUntilChanged() . ( Ib482f )

Version 2.6.0-beta01

8 февраля 2023 г.

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

Kotlin Conversions

  • LifecycleOwner is now written in Kotlin. This is a source incompatible change for classes written in Kotlin - they must now override the lifecycle property rather than implementing the previous getLifecycle() function. ( I75b4b , b/240298691 )
  • ViewModelStoreOwner is now in Kotlin. This is a source incompatible change for classes written in Kotlin - they must now override the viewModelStore property rather than implementing the previous getViewModelStore() function. ( I86409 , b/240298691 )
  • The Kotlin extension on LifecycleOwner that provides the lifecycleScope field has been moved to the lifecycle-common artifact from lifecycle-runtime-ktx . ( I41d78 , b/240298691 )
  • The Kotlin extension on Lifecycle that provides the coroutineScope field has been moved to the lifecycle-common artifact from lifecycle-runtime-ktx . ( Iabb91 , b/240298691 )

Version 2.6.0-alpha05

25 января 2023 г.

androidx.lifecycle:lifecycle-*:2.6.0-alpha05 is released. Version 2.6.0-alpha05 contains these commits.

Kotlin Conversions

  • Transformations is now written in Kotlin. This is a source incompatible change for those classes written in Kotlin that were directly using syntax such as Transformations.map - Kotlin code must now use the Kotlin extension method syntax that was previously only available when using lifecycle-livedata-ktx . When using the Java programming language, the versions of these methods that take an androidx.arch.core.util.Function method are deprecated and replaced with the versions that take a Kotlin Function1 . This change maintains binary compatibility. ( I8e14f )
  • ViewTreeViewModelStoreOwner is now written in Kotlin. This is a source incompatible change for those classes written in Kotlin - you must now directly import and use the Kotlin extension methods on View of androidx.lifecycle.setViewTreeViewModelStoreOwner and androidx.lifecycle.findViewTreeViewModelStoreOwner to set and find a previously set owner. This is binary compatible and remains source compatible for implementations written in the Java programming language. ( Ia06d8 , Ib22d8 , b/240298691 )
  • The HasDefaultViewModelProviderFactory interface is now written in Kotlin. This is a source incompatible change for classes written in Kotlin - they must now override the defaultViewModelProviderFactory and defaultViewModelCreationExtras properties rather than implementing the previous corresponding functions. ( Iaed9c , b/240298691 )
  • Observer is now written in Kotlin. Its onChanged() method now uses the name value for its parameter. ( Iffef2 , I4995e , b/240298691 )
  • AndroidViewModel , AbstractSavedStateViewModelFactory , LifecycleService , ServiceLifecycleDispatcher , and ProcessLifecycleOwner are now written in Kotlin ( I2e771 , Ibae40 , I160d7 , I08884 , I1cda7 , b/240298691 )

Version 2.6.0-alpha04

11 января 2023 г.

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

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

  • LiveData now includes a new isInitialized property that indicates whether an explicit value has ever been set on the LiveData , allowing you to distinguish between liveData.value returning null because no value has ever been set or an explicit null value. ( Ibd018 )

Изменения API

  • The collectAsStateWithLifecycle() APIs of lifecycle-runtime-compose are no longer in experimental status. ( I09d42 , b/258835424 )
  • Lifecycle.launchWhenX methods and Lifecycle.whenX methods have been deprecated as the use of a pausing dispatcher can lead to wasted resources in some cases. It is recommended to use Lifecycle.repeatOnLifecycle . ( Iafc54 , b/248302832 )

Kotlin Conversions

  • ViewTreeLifecycleOwner is now written in Kotlin. This is a source incompatible change for those classes written in Kotlin - you must now directly import and use the Kotlin extension methods on View of androidx.lifecycle.setViewTreeLifecycleOwner and androidx.lifecycle.findViewTreeLifecycleOwner to set and find a previously set owner. This replaces the previous Kotlin extension in lifecycle-runtime-ktx . This is binary compatible and remains source compatible for implementations written in the Java programming language. ( I8a77a , I5234e , b/240298691 )
  • LiveDataReactiveStreams is now written in Kotlin. The Kotlin extensions previously in lifecycle-reactivestreams-ktx have been moved into the lifecycle-reactivestreams module and have become the primary surface for code written in Kotlin. This is a source incompatible change for code written in Kotlin if you were not already using the Kotlin extension method APIs. ( I2b1b9 , I95d22 , b/240298691 )
  • DefaultLifecycleObserver , LifecycleEventObserver , Lifecycle , LifecycleRegistry , LifecycleObserver , and ViewModelStore are now written in Kotlin ( Iadffd , ( I60034 , I8c52c , I9593d , I01fe1 , I59a23 , b/240298691 )

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

  • SavedStateHandle no longer crashes with a ClassCastException when calling get() with the incorrect class type. ( I6ae7c )

Version 2.6.0-alpha03

24 октября 2022 г.

androidx.lifecycle:lifecycle-*:2.6.0-alpha03 is released. Version 2.6.0-alpha03 contains these commits.

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

  • Fixed an issue with constraints between different Lifecycle modules not working as intended. ( I18d0d , b/249686765 )
  • Errors thrown by LifecycleRegistry.moveToState() now include a more helpful error messaging that informs developers of the component causing the error. ( Idf4b2 , b/244910446 )

Version 2.6.0-alpha02

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

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

Изменения API

  • MediatorLiveData now includes a constructor to set an initial value. ( Ib6cc5 , b/151244085 )

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

  • Lifecycle artifacts now include constraints that ensure that all inter-dependent Lifecycle artifacts use the same version, automatically upgrading other dependencies when one is upgraded. b/242871265
  • FlowLiveData.asFlow() now creates a callbackFlow rather than using its own Channel implementation to ensure thread-safety and context preservation. ( I4a8b2 , b/200596935 )
  • FlowLiveData 's asLiveData function will now preserve the initial value of a StateFlow when creating the new LiveData object. ( I3f530 , b/157380488 )
  • From Lifecycle 2.5.1 : Custom implementations of AndroidViewModelFactory now correctly calls the create(modelClass) function when using the stateful constructor with Lifecycle 2.4+ ( I5b315 , b/238011621 )

Version 2.6.0-alpha01

29 июня 2022 г.

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

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

  • Added a new extension on StateFlow and Flow of collectAsStateWithLifecycle that collect from flows and represents its latest value as Compose State in a lifecycle-aware manner. The flow is collected and the new emission is set to the State's value when the lifecycle is at least in a certain Lifecycle.State . When the lifecycle falls below that Lifecycle.State , the flow collection stops and the State's value is not updated. ( I1856e , b/230557927 )

Version 2.5

Version 2.5.1

27 июля 2022 г.

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

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

  • Custom implementations of AndroidViewModelFactory now correctly call the create(modelClass) function when using the stateful AndroidViewModelFactory constructor with Lifecycle 2.4+. ( I5b315 , b/238011621 )

Version 2.5.0

29 июня 2022 г.

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

Important changes since 2.4.0

  • SavedStateHandle now offers a getStateFlow() API that returns a Kotlin StateFlow for monitoring value changes as an alternative to using LiveData .

  • ViewModel CreationExtras - when writing a custom ViewModelProvider.Factory , it is no longer required to extend AndroidViewModelFactory or AbstractSavedStateViewModelFactory to gain access to an Application or SavedStateHandle , respectively. Instead, these fields are provided to every ViewModelProvider.Factory subclass as CreationExtras via the new overload of create : create(Class<T>, CreationExtras) . These extras are provided automatically by your Activity or Fragment when using Activity 1.5.0 and Fragment 1.5.0 , respectively.

    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 now provides a viewModelFactory Kotlin DSL that allows you define your ViewModelProvider.Factory in terms of one or more lambda initializers, one for each particular ViewModel class your custom factory supports, using CreationExtras as the primary data source.

    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 now offers a viewModel() API that takes a lambda factory for creating a ViewModel instance without requiring the creation of a custom ViewModelProvider.Factory .

    // Within a @Composable, you can now skip writing a custom Factory
    // and instead write a lambda to do the initialization of your ViewModel
    val detailViewModel = viewModel {
      // This lambda is only called the first time the ViewModel is created
      // and all CreationExtras are available inside the lambda
      val savedStateHandle = createSavedStateHandle()
      DetailViewModel(savedStateHandle)
    }
    
  • SavedStateHandle Compose Saver Integration - the lifecycle-viewmodel-compose artifact now contains new experimental APIs in SavedStateHandle.saveable that allow rememberSaveable like behavior backed by the SavedStateHandle of a `ViewModel.

    class ListScreenViewModel(handle: SavedStateHandle): ViewModel() {
        // This value survives both configuration changes and process death and recreation
        val editMode by handle.saveable { mutableStateOf(false) }
    }
    
  • Added an addCloseable() API and a new constructor overload that allow you to add one or more Closeable objects to the ViewModel that will be closed when the ViewModel is cleared without requiring any manual work in onCleared() .

    For instance, to create a coroutine scope that you can inject into a ViewModel, but control via testing, you can create a CoroutineScope that implements Closeable :

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

    Which can then be used in your ViewModel constructor while maintaining the same lifetime as viewModelScope :

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

Behavior changes

  • Attempting to move the Lifecycle.State from INITIALIZED to DESTROYED will now always throw an IllegalStateException regardless of whether the Lifecycle has an attached observer.
  • LifecycleRegistry will now clear their observers when they reach the DESTROYED state.

Version 2.5.0-rc02

June 15, 2022

androidx.lifecycle:lifecycle-*:2.5.0-rc02 is released. Version 2.5.0-rc02 contains these commits.

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

  • ViewModelProvider will no longer crash when mixing previous versions of compileOnly Lifecycle dependencies with versions 2.5+. ( I81a66 , b/230454566 )

Version 2.5.0-rc01

11 мая 2022 г.

androidx.lifecycle:lifecycle-*:2.5.0-rc01 is released. Version 2.5.0-rc01 contains these commits.

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

  • MediatorLiveData.addSource() now throws a NullPointerException when passed a null source instead of propagating the null source to observers.( Ibd0fb , b/123085232 )

Version 2.5.0-beta01

April 20, 2022

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

Изменения API

  • Added SavedStateHandle.saveable property delegates to use property names as keys for persisting state into the SavedStateHandle ( I8bb86 , b/225014345 )

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

  • Fixed an issue where nesting one NavHost within another NavHost in a non-primary bottom navigation tab would lead to an IllegalStateException when using multiple back stacks. ( I11bd5 , b/228865698 )

Version 2.5.0-alpha06

6 апреля 2022 г.

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

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

  • Add experimental MutableState overload to SavedStateHandle.saveable for parity with rememberSaveable ( I38cfe , b/224565154 )

Изменения API

  • CreationExtras is now abstract instead of sealed. ( Ib8a7a )

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

  • Fixed an IllegalStateException: Already attached to lifecycleOwner error caused by SavedStateHandleController . ( I7ea47 , b/215406268 )

Version 2.5.0-alpha05

23 марта 2022 г.

androidx.lifecycle:lifecycle-*:2.5.0-alpha05 is released. Version 2.5.0-alpha05 contains these commits.

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

  • The lifecycle-viewmodel-compose module now provides SavedStateHandleSaver , an experimental API that ensures values in a SavedStateHandle are integrated correctly with the same saved instance state that rememberSaveable uses. ( Ia88b7 , b/195689777 )

Изменения API

  • Fixed a compatibility issue with Lifecycle 2.3 and newer Lifecycle versions in Java. ( I52c8a , b/219545060 )

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

  • SavedStateViewFactory now supports using CreationExtras even when it was initialized with a SavedStateRegistryOwner . If extras are provided, the initialized arguments are ignored. ( I6c43b , b/224844583 )

Version 2.5.0-alpha04

9 марта 2022 г.

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

Изменения API

  • SavedStateHandle now offers a getStateFlow() API that returns a Kotlin StateFlow for monitoring value changes as an alternative to using LiveData . ( Iad3ab , b/178037961 )

Version 2.5.0-alpha03

23 февраля 2022 г.

androidx.lifecycle:lifecycle-*:2.5.0-alpha03 is released. Version 2.5.0-alpha03 contains these commits.

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

  • Added an addCloseable() API and a new constructor overload that allow you to add one or more Closeable objects to the ViewModel that will be closed when the ViewModel is cleared without requiring any manual work in onCleared() . ( I55ea0 )
  • lifecycle-viewmodel now provides an InitializerViewModelFactory that allows you to add lambda for handling particular ViewModel classes, using CreationExtras as the primary data source. ( If58fc , b/216687549 )
  • lifecycle-viewmodel-compose now offers a viewModel() API that takes a lambda factory for creating a ViewModel instance without requiring the creation of a custom ViewModelProvider.Factory . ( I97fbb , b/216688927 )

Изменения API

  • You can now create a ViewModel with CreationExtras via lifecycle-viewmodel-compose . ( I08887 , b/216688927 )

Behavior changes

  • Attempting to move the Lifecycle.State from INITIALIZED to DESTROYED will now always throw an IllegalStateException regardless of whether the Lifecycle has an attached observer. ( I7c390 , b/177924329 )
  • LifecycleRegistry will now clear their observers when they reach the DESTROYED state. ( I4f8dd , b/142925860 )

Version 2.5.0-alpha02

9 февраля 2022 г.

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

Изменения API

  • SavedStateHandle and SavedStateViewModelFactory have been converted to Kotlin. This has improved the nullability of the generics in both classes. ( Ib6ce2 , b/216168263 , I9647a , b/177667711 )
  • The LiveData switchMap function parameter can now have a nullable output. ( I40396 , b/132923666 )
  • The LiveData -ktx extensions are now annotated with @CheckResult to enforce that the result is used when calling these functions. ( Ia0f05 , b/207325134 )

Behavior changes

  • SavedStateHandle now properly stores the defaultValue when no value for the specified key exists. ( I1c6ce , b/178510877 )

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

  • From Lifecycle 2.4.1 : Updated lifecycle-process to depend on Startup 1.1.1 to ensure that fixes that prevent ProcessLifecycleInitializer from throwing a StartupException are available by default. ( Ib01df , b/216490724 )
  • There is now an improved error message when custom AndroidViewModel classes have parameters in the wrong order and attempt to create a ViewModel . ( I340f7 , b/177667711 )
  • You can now create a view model via CreationExtras using the AndroidViewModelFactory without setting an application. ( I6ebef , b/217271656 )

Version 2.5.0-alpha01

26 января 2022 г.

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

ViewModel CreationExtras

With this release, we are laying the groundwork for restructuring how a ViewModel is constructed. Instead of a rigid set of subclasses of ViewModelProvider.Factory that each add additional functionality (allowing an Application constructor parameter via AndroidViewModelFactory , allowing a SavedStateHandle constructor parameter via SavedStateViewModelFactory and AbstractSavedStateViewModelFactory , etc.), we are moving to a world of stateless factories that rely on a new concept, CreationExtras . ( Ia7343 , b/188691010 , b/188541057 )

With this change, ViewModelProvider no longer makes direct calls into the previous create(Class<T>) method of ViewModelProvider.Factory . Instead, it calls into a new overload of create : create(Class<T>, CreationExtras) . This means that any direct implementation of the ViewModelProvider.Factory instance now has access to each of these new CreationExtras :

  • ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY : this String provides access to the custom key you passed to ViewModelProvider.get() .
  • ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY provides access to the Application class.
  • SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY provides access to the SavedStateRegistryOwner that is being used to construct this ViewModel.
  • SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY provides access to the ViewModelStoreOwner that is being used to construct this ViewModel.
  • SavedStateHandleSupport.DEFAULT_ARGS_KEY provides access to the Bundle of arguments that should be used to construct a SavedStateHandle .

These extras are provided by default when using Activity 1.5.0-alpha01 , Fragment 1.5.0-alpha01 , and Navigation 2.5.0-alpha01 . If you use an earlier version of those libraries, your CreationExtras will be empty - all of the existing subclasses of ViewModelProvider.Factory have been rewritten to support both the legacy creation path used by earlier versions of those libraries and the CreationExtras path which will be used идем вперед.

These CreationExtras allow you to construct a ViewModelProvider.Factory that passes just the information you need to each ViewModel without relying on a strict hierarchy of Factory subclasses:

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

We use the createSavedStateHandle() Kotlin extension function on CreationExtras from SavedStateHandleSupport to construct a SavedStateHandle only for the one ViewModel that needs it. ( Ia6654 , b/188541057 )

Custom CreationExtras can be provided by overriding getDefaultViewModelCreationExtras() in your ComponentActivity or Fragment , thus making them available to your custom ViewModelProvider.Factory as a built in form of assisted injection. These extras will automatically be made available to your custom Factory when used directly with ViewModelProvider or when using the by viewModels() and by activityViewModels() Kotlin property extensions. ( I79f2b , b/207012584 , b/207012585 , b/207012490 )

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

  • Fixed an issue where the default value provided to a SavedStateHandle would reappear after process death and recreation, even if it was specifically removed from the SavedStateHandle . As a consequence of this, SavedStateHandle will no longer merge default values and restored values together, instead only using the restored values as the source of truth. ( I53a4b )

Version 2.4

Version 2.4.1

9 февраля 2022 г.

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

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

  • Backported from Lifecycle 2.5.0-alpha01 : Fixed an issue where the default value provided to a SavedStateHandle would re-appear after process death and recreation, even if it was specifically removed from the SavedStateHandle . As a consequence of this, SavedStateHandle will no longer merge default values and restored values together, instead only using the restored values as the source of truth. ( I53a4b )
  • lifecycle-process now depends on Androidx Startup 1.1.1 which fixed a regression in where using ProcessLifecycleInitializer would cause an StartupException . ( b/216490724 )

Version 2.4.0

27 октября 2021 г.

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

Important changes since 2.3.0

  • @OnLifecycleEvent was deprecated. LifecycleEventObserver or DefaultLifecycleObserver should be used instead.
  • androidx.lifecycle:lifecycle-viewmodel-compose library was added. It provides viewModel() composable and LocalViewModelStoreOwner .
    • Source-breaking change : ViewModelProvider has been rewritten in Kotlin. ViewModelProvider.Factory.create method no longer allows nullable generic.
  • New coroutines API were added to androidx.lifecycle:lifecycle-runtime-ktx :
  • Lifecycle.repeatOnLifecycle , API that executes a block of code in a coroutine when the Lifecycle is at least in a certain state. The block will cancel and re-launch as the lifecycle moves in and out of the target state;
  • Flow.flowWithLifecycle , API that emits values from the upstream Flow when the lifecycle is at least in a certain state.
  • DefaultLifecycleObserver was moved from lifecycle.lifecycle-common-java8 to lifecycle.lifecycle-common . lifecycle.lifecycle-common-java8 doesn't provide anymore any additional functionality on top of lifecycle.lifecycle-common , so dependency on it can be replaced by lifecycle.lifecycle-common .
  • Non coroutines API from lifecycle-viewmodel-ktx have been moved to the lifecycle-viewmodel module.
  • 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>
    

Version 2.4.0-rc01

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

androidx.lifecycle:lifecycle-*:2.4.0-rc01 is released with no changes from Lifecycle 2.4.0-beta01. Version 2.4.0-rc01 contains these commits.

Version 2.4.0-beta01

September 15, 2021

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

Изменения API

  • @OnLifecycleEvent was deprecated. LifecycleEventObserver or DefaultLifecycleObserver should be used instead. ( I5a8fa )
  • DefaultLifecycleObserver was moved from androidx.lifecycle.lifecycle-common-java8 to androidx.lifecycle.lifecycle-common . androidx.lifecycle.lifecycle-common-java8 doesn't provide anymore any additional functionality on top of androidx.lifecycle.lifecycle-common , so dependency on it can be replaced by androidx.lifecycle.lifecycle-common . ( I021aa )
  • Non coroutines API from lifecycle-viewmodel-ktx have been moved to the lifecycle-viewmodel module. ( I6d5b2 )

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

  • Thanks dmitrilc for fixing a type in the ViewModel documentation! ( #221 )

Version 2.4.0-alpha03

August 4, 2021

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

Изменения 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

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

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 )

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

June 2, 2021

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

Updated to be compatible with Compose version 1.0.0-beta08 .

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

18 мая 2021 г.

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

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

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

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

April 7, 2021

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

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.

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

March 10, 2021

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

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

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

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

  • The viewModel() composable and LocalViewModelStoreOwner were moved from androidx.compose.ui.viewinterop to this artifact in the androidx.lifecycle.viewmodel.compose package. ( I7a374 )

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

Version 2.3.0

Version 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

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

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

May 20, 2020

androidx.lifecycle:lifecycle-*:2.3.0-alpha03 are released. Version 2.3.0-alpha03 contains these commits.

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

  • SavedStateHandle now supports lazy serialization by allowing you to call setSavedStateProvider() for a given key, providing a SavedStateProvider that will get a callback to saveState() when the SavedStateHandle is asked to save its state. ( b/155106862 )
  • A new ViewTreeViewModelStoreOwner.get(View) API allows you to retrieve the containing ViewModelStoreOwner given a View instance. You must upgrade to Activity 1.2.0-alpha05 , Fragment 1.3.0-alpha05 , and AppCompat 1.3.0-alpha01 to populate this correctly. A findViewModelStoreOwner() Kotlin extension has been added to lifecycle-viewmodel-ktx . ( aosp/1295522 )

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

  • Fixed an issue that caused the MutableLiveData Lint checks released in Lifecycle 2.3.0-alpha01 from being published alongside the lifecycle-livedata-core-ktx artifact. ( b/155323109 )

Version 2.3.0-alpha02

29 апреля 2020 г.

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

Изменения API

  • SavedStateViewModelFactory now allows you to pass a null Application to its constructor to better support cases where one is not readily available and support for AndroidViewModel is not needed. ( aosp/1285740 )

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

  • Improved cold start performance by avoiding class verification failure on API 28 and lower devices. ( aosp/1282118 )

Version 2.3.0-alpha01

4 марта 2020 г.

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

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

  • A new ViewTreeLifecycleOwner.get(View) API allows you to retrieve the containing LifecycleOwner given a View instance. You must upgrade to Activity 1.2.0-alpha01 and Fragment 1.3.0-alpha01 to populate this correctly. A findViewTreeLifecycleOwner Kotlin extension is available in lifecycle-runtime-ktx . ( aosp/1182361 , aosp/1182956 )
  • Added a new Lint check that warns you when setting a null value on a MutableLiveData that has been defined in Kotlin as non-null. This is available when using the livedata-core-ktx or livedata-ktx artifacts. ( aosp/1154723 , aosp/1159092 )
  • A new lifecycle-runtime-testing artifact is available that provides a TestLifecycleOwner that implements LifecycleOwner and provides a thread safe mutable Lifecycle . ( aosp/1242438 )

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

  • The lifecycle-runtime artifact now has a unique package name. ( aosp/1187196 )

Version 2.2.0

ViewModel-Savedstate Version 2.2.0

5 февраля 2020 г.

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

Lifecycle ViewModel SavedState now shares the same version as other Lifecycle artifacts. The behavior of 2.2.0 is identical to the behavior of 1.0.0 .

Version 2.2.0

January 22, 2020

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

Important changes since 2.1.0

  • Lifecycle Coroutine Integration : The new lifecycle-runtime-ktx artifact adds integration between Lifecycle and Kotlin coroutines. The lifecycle-livedata-ktx has also been expanded to take advantage of coroutines. See Use Kotlin coroutines with Architecture Components for more details.
  • ViewModelProviders.of() deprecation : ViewModelProviders.of() has been deprecated. You can pass a Fragment or FragmentActivity to the new ViewModelProvider(ViewModelStoreOwner) constructor to achieve the same functionality when using Fragment 1.2.0 .
  • lifecycle-extensions Artifact Deprecation : With the above deprecation of ViewModelProviders.of() , this release marks the deprecation of the last API in lifecycle-extensions and this artifact should now be considered deprecated in its entirety. We strongly recommend depending on the specific Lifecycle artifacts you need (such as lifecycle-service if you're using LifecycleService and lifecycle-process if you're using ProcessLifecycleOwner ) rather than lifecycle-extensions as there will not be a future 2.3.0 release of lifecycle-extensions .
  • Gradle Incremental Annotation Processor : Lifecycle's annotation processor is incremental by default. If your app is written in the Java 8 programming language you can use DefautLifecycleObserver instead; and if it's written in the Java 7 programming language you can use LifecycleEventObserver .

Version 2.2.0-rc03

4 декабря 2019 г.

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

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

  • Fixed a failure occurring when a mocked ViewModel was stored in ViewModelStore and queried later with default factory.
  • Fix a usage of Dispatchers.Main.immediate in launchWhenCreated and similar methods to be called synchronously during corresponding lifecycle event. ( aosp/1156203 )

External contributions

  • Thanks to Anders Järleberg for contributing the fix! ( aosp/1156203 )
  • Thanks to Vsevolod Tolstopyatov from Jetbrains for reviewing an implementation of inlined execution.

Dependency changes

  • Lifecycle Extensions now depends on Fragment 1.2.0-rc03 .

Version 2.2.0-rc02

7 ноября 2019 г.

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

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

  • Fixed a bug in the proguard setup of the library that affected devices running API 28+ if the target API is below 29. ( b/142778206 )

Version 2.2.0-rc01

October 23, 2019

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

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

  • Fixed an issue where launchWhenCreated and related methods would run one frame later than the associated lifecycle method due to its use of Dispatchers.Main instead of Dispatchers.Main.immediate . ( aosp/1145596 )

External contributions

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

Version 2.2.0-beta01

9 октября 2019 г.

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

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

  • Fixed a regression introduced in Lifecycle 2.2.0-alpha05 in the ordering of ProcessLifecycleOwner and the activity's LifecycleOwner moving to started and resumed on Android 10 devices. ( aosp/1128132 )
  • Fixed a regression introduced in Lifecycle 2.2.0-alpha05 which would cause a NullPointerException when using version 2.0.0 or 2.1.0 of lifecycle-process . ( b/141536990 )

Version 2.2.0-alpha05

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

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

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

  • Fixed a race condition in coroutine livedata builder. b/140249349

Version 2.2.0-alpha04

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

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

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

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

External contributions

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

Version 2.2.0-alpha03

7 августа 2019 г.

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

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

Изменения API

  • 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

May 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

Version 1.0.0

January 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

October 23, 2019

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01 is released with no changes from 1.0.0-beta01 . Version 1.0.0-rc01 contains these commits .

ViewModel-Savedstate Version 1.0.0-beta01

9 октября 2019 г.

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

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

  • Fixed an issue where accessing a SavedState ViewModel for the first time in Activity.onActivityResult() would result in an IllegalStateException . ( b/139093676 )
  • Fixed an IllegalStateException when using AbstractSavedStateViewModelFactory . ( b/141225984 )

ViewModel-SavedState Version 1.0.0-alpha05

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

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

Изменения 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

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.

Version 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 .

Version 2.1.0

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

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

Version 2.1.0-rc01

2 июля 2019 г.

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

Version 2.1.0-beta01

May 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

January 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

December 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.

Version 2.0.0

Version 2.0.0

September 21, 2018

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

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

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

Version 2.0.0-beta01

July 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

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.
,

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

Lifecycle-aware components perform actions in response to a change in the lifecycle status of another component, such as activities and fragments. These components help you produce better-organized, and often lighter-weight code, that is easier to maintain.

This table lists all the artifacts in the androidx.lifecycle group.

Артефакт Стабильный выпуск Кандидат на выпуск Бета-версия Альфа-релиз
жизненный цикл-* 2.8.6 - - 2.9.0-alpha03
lifecycle-viewmodel-compose 2.8.6 - - 2.9.0-alpha03
This library was last updated on: September 18, 2024

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

To add a dependency on Lifecycle, you must add the Google Maven repository to your project. Для получения дополнительной информации прочтите репозиторий Google Maven .

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

Котлин

классный

    dependencies {
        def lifecycle_version = "2.8.7"
        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"

        // 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.8.7"
        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")

        // 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.8.7"
        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.8.7"
        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")
    }
    

For more information about dependencies, see Add Build Dependencies .

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

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

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

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

Version 2.9

Version 2.9.0-alpha03

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

androidx.lifecycle:lifecycle-*:2.9.0-alpha03 is released. Version 2.9.0-alpha03 contains these commits .

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

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

Version 2.9.0-alpha02

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

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

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

  • From Lifecycle 2.8.5 : Update the androidx.lifecycle.ReportFragment ProGuard rules to allow obfuscation . ( ff898e1 )

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

  • Move androidx.compose.ui.platform.LocalLifecycleOwner to common source set (KMP). Thanks Ivan Matkov from JetBrains for the contribution. ( 8cd5d03 )
  • From Lifecycle 2.8.5 : SavedStateHandle.saveable` extension delegate now supports nullable values. Thanks Roman Kalukiewicz for the contribution. ( 0d78ea6 )

Version 2.9.0-alpha01

7 августа 2024 г.

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

Kotlin Multiplatform

  • lifecycle-testing is now KMP compatible. ( Iea41e )
  • Add support for linuxArm64 kotlin multiplatform target ( I139d3 , b/338268719 )

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

  • A new androidx.lifecycle:lifecycle-viewmodel-testing KMP artifact is available that provides a ViewModelScenario class for testing ViewModels in isolation, with support for onCleared (all platforms) and SavedStateHandle (Android only). ( 337f68d , c9b3409 , 9799a95c , b/264602919 )
  • Creating a ViewModel with ViewModelProvider is now thread safe; @MainThread annotations have been removed. ( Ifd978 , b/237006831 )

Изменения API

  • Add the CreationExtras.Key() factory function to simplify the creation of anonymous CreationExtras.Key objects. ( I970ee )
  • CreationExtras now includes map-like operator overloads to enable idiomatic manipulation of content in Kotlin. It allows the use of in , += , and + with CreationExtras . ( Ib4353 )
  • CreationExtras now implements equals , hashCode , and toString methods. ( Ib4353 )
  • NewInstanceFactory is now available on JVM Desktop and Android targets. ( d3d0892 )
  • Inline extension property to expose underlying Application safely in Kotlin language version 2.0 ( I39df2 )

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

  • Removed manual outlining of access to new platform APIs since this happens automatically via API modeling when using R8 with AGP 7.3 or later (eg R8 version 3.3) and for all builds when using AGP 8.1 or later (eg D8 version 8.1). Clients who are not using AGP are advised to update to D8 version 8.1 or later. See this article for more details. ( If6b4c , b/345472586 )

Version 2.8

Version 2.8.6

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

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

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

  • The NullSafeMutableLiveData Lint error has improved support for smart casts, avoiding false positives. ( 85fed6 , b/181042665 )

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

Version 2.8.5

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

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

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

  • Update the androidx.lifecycle.ReportFragment ProGuard rules to allow obfuscation . ( ff898e1 )

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

  • SavedStateHandle.saveable extension delegate now supports nullable values. Thanks Roman Kalukiewicz for the contribution. ( 0d78ea6 )

Version 2.8.4

24 июля 2024 г.

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

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

  • LiveData.asFlow() now correctly handles cases where the returned Flow is immediately completed after receiving a value already set on the LiveData (for example, when using take(1) ). ( I9c566 )
  • Lifecycle*Effect completion is now idempotent (ie, if the onStopOrDispose was called because of the Lifecycle being stopped, it won't be called a second time upon disposal unless the Lifecycle goes back up to STARTED again). ( I5f607 , b/352364595 )

Version 2.8.3

1 июля 2024 г.

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

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

  • Fixed an issue with Lifecycle 2.8's backward compatibility with Compose 1.6.0 and lower when using code shrinking. ( aosp/3133056 , b/346808608 )

Version 2.8.2

12 июня 2024 г.

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

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

  • Fixed CompositionLocal LocalLifecycleOwner not present errors when using Lifecycle 2.8.X with Compose 1.6.X or earlier - you can now use Lifecycle 2.8.2 with any version of Compose without any workarounds required. ( aosp/3105647 , b/336842920 )
  • ViewModelProvider will no longer crash when mixing previous versions of compileOnly Lifecycle dependencies with versions 2.8+, fixing issues with libraries such as LeakCanary. ( I80383 , b/341792251 )

Version 2.8.1

29 мая 2024 г.

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

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

  • lifecycle-viewmodel-compose now only has a common dependency on compose-runtime , removing its common dependency on compose-ui . The Android artifact retains its compose-ui for compatibility. ( aosp/3079334 , b/339562627 )
  • ViewModel 's saveable integration using property delegates now uses the class name as part of the auto-generated key, avoiding conflicts if multiple classes use the same SavedStateHandle . ( aosp/3063463 )

Version 2.8.0

14 мая 2024 г.

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

Important changes since 2.7.0

  • LocalLifecycleOwner has been moved from Compose UI to lifecycle-runtime-compose so that its Compose-based helper APIs can be used outside of Compose UI.
  • The lifecycle-runtime-compose artifact now contains the dropUnlessResumed and dropUnlessStarted APIs which allow you to drop click or other events that occur even after the LifecycleOwner has dropped below the given Lifecycle.State . For example, this can be used with Navigation Compose to avoid handling click events after a transition to another screen has already begun: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
  • ViewModel.viewModelScope is now an overridable constructor parameter, allowing you to inject your own dispatcher and SupervisorJob() or to override the default by using the backgroundScope available within 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 has been rewritten in Kotlin and now uses AutoClosable instead of Closeable . It now supports adding AutoCloseable objects with a key that allows retrieving them via getCloseable() .

  • Calling LifecycleStartEffect and LifecycleResumeEffect without a key is now an error, following the same convention as the DisposableEffect API that these APIs mirror.

  • Deprecated LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) in favor of LiveData.toPublisher(lifecycleOwner) .

  • The lifecycle-livedata-core-ktx kotlin extensions have now been moved to the lifecycle-livedata-core module.

  • The NullSafeMutableLiveData has been refactored to avoid many false positives.

Lifecycle Kotlin Multiplatform Compatibility

The core Lifecycle APIs in Lifecycle , LifecycleOwner , LifecycleObserver , Lifecycle.State , Lifecycle.Event , and LifecycleRegistry are now shipped in artifacts compatible with Kotlin Multiplatform.

Artifacts impacted:

  • lifecycle-common moves most APIs to common and supports jvm and iOS in addition to Android.
  • lifecycle-runtime moves most APIs to common and supports jvm and iOS in addition to Android.
  • lifecycle-runtime-ktx is now empty, with all APIs being moved into lifecycle-runtime .
  • lifecycle-runtime-compose moves all APIs to common and ships an Android artifact, matching the multiplatform support of androidx.compose .

ViewModel Kotlin Multiplatform Compatibility

The lifecycle-viewmodel artifact and APIs like ViewModel , ViewModelStore , ViewModelStoreOwner , and ViewModelProvider are now shipped in artifacts compatible with Kotlin Multiplatform.

To accommodate this change, methods such as those on ViewModelProvider that took a java.lang.Class<T> now have an equivalent method that takes a kotlin.reflect.KClass<T> .

Binary compatibility on Android has been maintained, but there are a few notable changes when comparing the Android API surface to the common API surface:

  • Constructing a ViewModelProvider instance is now done through the ViewModelProvider.create() methods rather than directly calling its constructor.
  • ViewModelProvider.NewInstanceFactory and ViewModelProvider.AndroidViewModelFactory are only available on Android.
    • Custom Factories are recommended to extend from ViewModelProvider.Factory and use the create method that takes a CreationExtras or use the viewModelFactory Kotlin DSL.
  • Using ViewModelProvider without a custom factory on non-JVM platforms will result in an UnsupportedOperationException . On JVM platforms, compatibility is preserved by using the no-args ViewModel constructor if a custom factory is not provided.
  • viewModelScope will fallback to an EmptyCoroutineContext in platforms where Dispatchers.Main is not available (eg, Linux).

Artifacts impacted:

  • lifecycle-viewmodel moves most APIs to common and supports jvm and iOS in addition to Android.
  • lifecycle-viewmodel-ktx is now empty, with all APIs being moved into lifecycle-viewmodel .
  • lifecycle-viewmodel-compose moves all APIs to common and ships an Android artifact, matching the multiplatform support of androidx.compose .

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

  • InitializerViewModelFactory (including viewModelFactory builder function) will now throw an IllegalArgumentException if a initializer with the same clazz: KClass<VM : ViewModel> has already been added. ( Ic3a36 )

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

Version 2.8.0-rc01

1 мая 2024 г.

androidx.lifecycle:lifecycle-*:2.8.0-rc01 is released. Version 2.8.0-rc01 contains these commits .

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

  • Fixed an issue where the Baseline Profile for lifecycle-common classes was not properly packaged. These are now packaged in the lifecycle-runtime AAR. ( aosp/3038274 , b/322382422 )
  • Fixed an unintentional ordering change in how AutoCloseable instances attached to a ViewModel are cleared - the previous order of addCloseable(String, AutoCloseable) , then addClosable(AutoCloseable) , then onCleared() has been restored. ( aosp/3041632 )
  • Improve the default creation behavior for viewModelScope for native and JVM Desktop environments. ( aosp/3039221 )

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

  • Thanks Victor Kropp for improving the checking for the main thread on JVM Desktop. ( aosp/3037116 )

Version 2.8.0-beta01

17 апреля 2024 г.

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

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

  • The lifecycle-runtime-compose artifact is now compatible with Kotlin Multiplatform, moving its code to common and ships an Android artifact, matching the multiplatform support for androidx.compose . ( If7a71 , I4f4a0 , b/331769623 )

Version 2.8.0-alpha04

3 апреля 2024 г.

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

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

  • The lifecycle-viewmodel-compose artifact is now compatible with Kotlin Multiplatform, moving its code to common and ships an Android artifact, matching the multiplatform support of androidx.compose . The accommodate this change, the Composable viewModel method now accepts a KClass in addition to a java.lang.Class . ( b/330323282 )

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

Dependency update

  • The lifecycle-viewmodel-compose artifact now depends on Compose 1.6.0.
  • Lifecycle now depends on Profile Installer 1.3.1 .

Version 2.8.0-alpha03

20 марта 2024 г.

androidx.lifecycle:lifecycle-*:2.8.0-alpha03 is released. Version 2.8.0-alpha03 contains these commits .

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

  • ViewModel.viewModelScope is now an overridable constructor parameter, allowing you to inject your own dispatcher and SupervisorJob() or to override the default by using the backgroundScope available within 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 Multiplatform Compatibility

The lifecycle-viewmodel artifact and APIs like ViewModel , ViewModelStore , ViewModelStoreOwner , and ViewModelProvider are now shipped in artifacts compatible with Kotlin Multiplatform. ( b/214568825 )

To accommodate this change, methods such as those on ViewModelProvider that took a java.lang.Class<T> now have an equivalent method that takes a kotlin.reflect.KClass<T> .

Binary compatibility on Android has been maintained, but there are a few notable changes when comparing the Android API surface to the common API surface:

  • Constructing a ViewModelProvider instance is now done through the ViewModelProvider.create() methods rather than directly calling its constructor.
  • ViewModelProvider.NewInstanceFactory and ViewModelProvider.AndroidViewModelFactory are only available on Android.
    • Custom Factories are recommended to extend from ViewModelProvider.Factory and use the create method that takes a CreationExtras or use the viewModelFactory Kotlin DSL.
  • Using ViewModelProvider without a custom factory on non-JVM platforms will result in an UnsupportedOperationException . On JVM platforms, compatibility is preserved by using the no-args ViewModel constructor if a custom factory is not provided.
  • viewModelScope will fallback to an EmptyCoroutineContext in platforms where Dispatchers.Main is not available (eg, Linux).

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

  • InitializerViewModelFactory (including viewModelFactory builder function) will now throw an IllegalArgumentException if a initializer with the same clazz: KClass<VM : ViewModel> has already been added. ( Ic3a36 )

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

  • ViewModel.getCloseable now handles duplicated keys: if the key already has an AutoCloseable resource associated with it, the old resource will be replaced and closed immediately. ( Ibeb67 )
  • Accessing the viewModelScope of a ViewModel is now thread safe. ( If4766 , b/322407038 )

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

  • LocalLifecycleOwner moved from Compose UI to lifecycle-runtime-compose so that its Compose-based helper APIs can be used outside of Compose UI. Thanks Jake Wharton for the contribution. ( I6c41b , b/328263448 )

Version 2.8.0-alpha02

21 февраля 2024 г.

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

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

  • The dropUnlessResumed and dropUnlessStarted APIs have been added which allow you to drop click or other events that occur even after the LifecycleOwner has dropped below the given Lifecycle.State . For example, this can be used with Navigation Compose to avoid handling click events after a transition to another screen has already begun: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) } ( Icba83 , b/317230685 )

Kotlin Conversions

  • ViewModel is now written in Kotlin ( I16f26 , b/214568825 )
  • The lifecycle-viewmodel-ktx kotlin extensions have now been moved to the base lifecycle module. ( Id787b , b/274800183 )
  • The lifecycle-runtime-ktx kotlin extensions have now been moved to the base lifecycle module. ( Ic3686 , b/274800183 )
  • The lifecycle-livedata-core-ktx kotlin extensions have now been moved to the base lifecycle module. ( I54a3d , b/274800183 )

Kotlin Multiplatform Compatibility

  • The core Lifecycle APIs in Lifecycle , LifecycleOwner , LifecycleObserver , Lifecycle.State , Lifecycle.Event , and LifecycleRegistry are now shipped in artifacts compatible with Kotlin Multiplatform. ( b/317249252 )

Изменения API

  • Calling LifecycleStartEffect and LifecycleResumeEffect without a key is now an error, following the same convention as the DisposableEffect API that these APIs mirror. ( Ib0e0c , b/323518079 )
  • ViewModel now uses AutoCloseable instead of Closeable . That is a backward compatible change. ( I27f8e , b/214568825 )
  • Deprecated LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) in favor of LiveData.toPublisher(lifecycleOwner) . ( Iabe29 , b/262623005 )

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

  • Thanks Ivan Matkov from Jetbrains for helping move Lifecycle to Kotlin Multiplatform. ( aosp/2926690 , I0c5ac , If445d )

Version 2.8.0-alpha01

24 января 2024 г.

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

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

  • ViewModel now supports adding Closeable objects with a key that allows retrieving them via getCloseable() . ( I3cf63 )

Version 2.7

Version 2.7.0

10 января 2024 г.

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

Important changes since 2.6.0

  • TestLifecycleOwner now includes a suspending function setCurrentState() which ensures that the state change and all LifecycleObserver callbacks are completed before returning. Notably, unlike setting the currentState property directly, this does not use runBlocking , making it safe to use within a coroutine such as one provided by runTest .
  • The LiveData extensions of map and switchMap now mirror the behavior of distinctUntilChanged - if the LiveData has a value set, the map / switchMap function will be immediately called to populate the value of the returned LiveData . This ensures that the initial value will be set as part of the first composition (when used with observeAsState() ), but does not change the observation behavior - updates values from the source LiveData will still only apply once you start observing the LiveData .
  • This release fixes an issue where SavedStateHandle would not properly restore custom Parcelable classes after process death and recreation. Due to type information that is lost by the Android framework, arrays of custom Parcelables require additional work (manually creating a typed array of the right type) and the documentation on get , getLiveData , and getStateFlow now specifically calls this limitation out.
  • The proguard keep rules associated with LifecycleObserver have been removed. This means that proguarded code that wishes to use APIs via reflection (such as using the long since deprecated @OnLifecycleEvent annotation) will need to provide their own keep rules for their specific use case.

Lifecycle Event Observability

  • As an alternative to using a LifecycleEventObserver , you can now observe a Flow of Lifecycle.Event via the Lifecycle.asFlow() extension method.
  • Jetpack Compose users can now use LifecycleEventEffect to run Compose side effects based on Lifecycle.Event .
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
    viewModel.refreshData()
  }
  // …
}
  • Jetpack Compose users can use LifecycleStartEffect and LifecycleResumeEffect to handle pairs of events - started to stopped and resumed to paused, respectively. This API mirrors the one found in DisposableEffect and is suitable for cases where the change being made when the state is going up needs to be reversed when going back down.
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleStartEffect(viewModel) {
    val timeTracking = viewModel.startTrackingTimeOnScreen()
    onStopOrDispose {
      timeTracking.stopTrackingTimeOnScreen()
    }
  }
  // …
}

See Run code on lifecycle events for more information.

Lifecycle State Observability

  • The current Lifecycle.State can now be observed via the Lifecycle.currentStateFlow property, which returns a StateFlow where the value is the current Lifecycle.State .
  • Jetpack Compose users can use the Lifecycle.currentStateAsState() extension to directly expose Lifecycle.State as Compose State . This is equivalent (and a shorter alternative) to lifecycle.currentStateFlow.collectAsState() .

See Collect lifecycle state with flows for more information.

Version 2.7.0-rc02

13 декабря 2023 г.

androidx.lifecycle:lifecycle-*:2.7.0-rc02 is released. Version 2.7.0-rc02 contains these commits.

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

  • Fixed an issue where SavedStateHandle would not properly restore custom Parcelable classes after process death and recreation. Due to type information that is lost by the Android framework, arrays of custom Parcelables require additional work (manually creating a typed array of the right type) and the documentation on get , getLiveData , and getStateFlow now specifically calls this limitation out. ( I0b55a )

Version 2.7.0-rc01

15 ноября 2023 г.

androidx.lifecycle:lifecycle-*:2.7.0-rc01 is released. Version 2.7.0-rc01 contains these commits.

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

  • LifecycleStartEffect and LifecycleResumeEffect now correctly dispose and recreate the effect block if the LifecycleOwner is changed. ( Ia25c6 )

Version 2.7.0-beta01

1 ноября 2023 г.

androidx.lifecycle:lifecycle-*:2.7.0-beta01 is released with no changes. Version 2.7.0-beta01 contains these commits.

  • A beta version bump, no major changes to this release version.

Version 2.7.0-alpha03

18 октября 2023 г.

androidx.lifecycle:lifecycle-*:2.7.0-alpha03 is released. Version 2.7.0-alpha03 contains these commits.

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

  • lifecycle-runtime-testing now contains a new Lint check to avoid setting the Lifecycle.State of the TestLifecycleOwner by using the currentState field when inside of a coroutine. The Lint check now suggests the suspending setCurrentState which allows setting the Lifecycle.State without blocking. ( Icf728 , b/297880630 )

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

  • Fixed an issue with LiveData.switchMap where returning the same LiveData instance both on the initial call and a subsequent call would prevent the LiveData instance from being added as a source. ( Ibedcba7 )

Version 2.7.0-alpha02

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

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

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

  • TestLifecycleOwner now includes the suspending function setCurrentState() to give users the option of using TestLifecycleOwner from within a coroutine such as one provided by runTest . ( I329de , b/259344129 )

Изменения API

  • All files from the lifecycle-livedata-ktx modules have been moved into the main lifecycle-livedata module. ( I10c6f , b/274800183 )

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

  • The LiveData.map() and LiveData.switchMap() extensions now sets the value of the returned LiveData if the previous LiveData has had a value set on it, ensuring that using the resulting LiveData in Jetpack Compose has the right state on the initial composition . ( I91d2b , b/269479952 )
  • ViewModel 's addCloseable() now immediately closes the Closeable if the ViewModel has already received a call to onCleared() . ( I4712e , b/280294730 )

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

  • From Lifecycle 2.6.2 : Fixed an issue where SavedStateHandle would not correctly be restored after process death if the state was restored, save() was called without actually saving the state in the parent SavedStateRegistry , and then the state was restored again. This fixes the interaction between rememberSaveable and Navigation Compose's NavHost . ( aosp/2729289 )

Version 2.7.0-alpha01

26 июля 2023 г.

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

Изменения API

  • Lifecycle.State is now Compose-observable via Lifecycle.currentStateFlow , which returns a StateFlow where the value is the current Lifecycle.State . ( Ib212d , b/209684871 )
  • Lifecycle.Event s can now able to be observed as a Flow with Lifecycle.asFlow(). ( If2c0f , b/176311030 )
  • LifecycleResumeEffect API has been added to run Compose SideEffect s based on both Lifecycle.Event.ON_RESUME and Lifecycle.Event.ON_PAUSE event callbacks. ( I60386 , b/235529345 )
  • LifecycleStartEffect API has been added to run Compose SideEffect s based on Lifecycle.Event.ON_START and Lifecycle.Event.ON_STOP event callbacks. ( I5a8d1 , b/235529345 )
  • LifecycleEventEffect API has been added to run Compose SideEffect s based on Lifecycle.Event . ( Ic9794 , b/235529345 )
  • Lifecycle.collectAsState() extension has been added to directly expose Lifecycle.State as Compose State . This is equivalent (and a shorter alternative) to lifecycle.currentStateFlow.collectAsState() . ( I11015 , b/235529345 )

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

  • The LiveData.distinctUntilChanged() extension now sets the value of the returned LiveData if the previous LiveData has had a value set on it. This does not change the observation behavior - updated values from the source LiveData will still only apply once you start observing the LiveData returned from distinctUntilChanged() . ( Ib482f )
  • The proguard keep rules associated with LifecycleObserver have been removed. This means that proguarded code that wishes to use APIs via reflection will need to provide their own keep rules for their specific use case. ( Ia12fd )

Version 2.6

Version 2.6.2

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

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

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

  • Fixed an issue where SavedStateHandle would not correctly be restored after process death if the state was restored, save() was called without actually saving the state in the parent SavedStateRegistry , and then the state was restored again. This fixes the interaction between rememberSaveable and Navigation Compose's NavHost . ( aosp/2729289 )

Version 2.6.1

22 марта 2023 г.

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

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

Version 2.6.0

8 марта 2023 г.

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

Important changes since 2.5.0

  • LiveData now includes a new isInitialized property that indicates whether an explicit value has ever been set on the LiveData , allowing you to distinguish between liveData.value returning null because no value has ever been set or an explicit null value.
  • MediatorLiveData now includes a constructor to set an initial value.
  • Added a new extension on StateFlow and Flow of collectAsStateWithLifecycle() that collect from flows and represents its latest value as Compose State in a lifecycle-aware manner.
  • Lifecycle.launchWhenX methods and Lifecycle.whenX methods have been deprecated as the use of a pausing dispatcher can lead to wasted resources in some cases. It is recommended to use Lifecycle.repeatOnLifecycle . For more information about one-time suspending work, please see this explanation on why this is inherently unsafe.
  • Kotlin Conversion - A large number of Lifecycle classes have been converted to Kotlin. All converted classes still retain their binary compatibility with previous versions. The following classes have source incompatible changes for classes written in Kotlin: ViewTreeLifecycleOwner , LiveDataReactiveStreams , HasDefaultViewModelProviderFactory , ViewTreeViewModelStoreOwner , Transformations , ViewModelStoreOwner , LifecycleOwner

The table below provides the source conversions for the new version of lifecycle.

Lifecycle 2.5 Lifecycle 2.5 (KTX) Lifecycle 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
  • The nullability of the onChanged method of a Observer created in Kotlin now matches the nullability of the generic type. If you want Observer.onChanged() to accept a nullable type, you must instantiate the Observer with a nullable type.
  • These classes were also converted to Kotlin, but remain source compatible: DefaultLifecycleObserver , LifecycleEventObserver , Lifecycle , LifecycleRegistry , LifecycleObserver , ViewModelStore , AndroidViewModel , AbstractSavedStateViewModelFactory , LifecycleService , ServiceLifecycleDispatcher , and ProcessLifecycleOwner

Version 2.6.0-rc01

22 февраля 2023 г.

androidx.lifecycle:lifecycle-*:2.6.0-rc01 is released. Version 2.6.0-rc01 contains these commits.

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

  • The LiveData.distinctUntilChanged() extension now sets the value of the returned LiveData if the previous LiveData has had a value set on it. This does not change the observation behavior - updated values from the source LiveData will still only apply once you start observing the LiveData returned from distinctUntilChanged() . ( Ib482f )

Version 2.6.0-beta01

8 февраля 2023 г.

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

Kotlin Conversions

  • LifecycleOwner is now written in Kotlin. This is a source incompatible change for classes written in Kotlin - they must now override the lifecycle property rather than implementing the previous getLifecycle() function. ( I75b4b , b/240298691 )
  • ViewModelStoreOwner is now in Kotlin. This is a source incompatible change for classes written in Kotlin - they must now override the viewModelStore property rather than implementing the previous getViewModelStore() function. ( I86409 , b/240298691 )
  • The Kotlin extension on LifecycleOwner that provides the lifecycleScope field has been moved to the lifecycle-common artifact from lifecycle-runtime-ktx . ( I41d78 , b/240298691 )
  • The Kotlin extension on Lifecycle that provides the coroutineScope field has been moved to the lifecycle-common artifact from lifecycle-runtime-ktx . ( Iabb91 , b/240298691 )

Version 2.6.0-alpha05

25 января 2023 г.

androidx.lifecycle:lifecycle-*:2.6.0-alpha05 is released. Version 2.6.0-alpha05 contains these commits.

Kotlin Conversions

  • Transformations is now written in Kotlin. This is a source incompatible change for those classes written in Kotlin that were directly using syntax such as Transformations.map - Kotlin code must now use the Kotlin extension method syntax that was previously only available when using lifecycle-livedata-ktx . When using the Java programming language, the versions of these methods that take an androidx.arch.core.util.Function method are deprecated and replaced with the versions that take a Kotlin Function1 . This change maintains binary compatibility. ( I8e14f )
  • ViewTreeViewModelStoreOwner is now written in Kotlin. This is a source incompatible change for those classes written in Kotlin - you must now directly import and use the Kotlin extension methods on View of androidx.lifecycle.setViewTreeViewModelStoreOwner and androidx.lifecycle.findViewTreeViewModelStoreOwner to set and find a previously set owner. This is binary compatible and remains source compatible for implementations written in the Java programming language. ( Ia06d8 , Ib22d8 , b/240298691 )
  • The HasDefaultViewModelProviderFactory interface is now written in Kotlin. This is a source incompatible change for classes written in Kotlin - they must now override the defaultViewModelProviderFactory and defaultViewModelCreationExtras properties rather than implementing the previous corresponding functions. ( Iaed9c , b/240298691 )
  • Observer is now written in Kotlin. Its onChanged() method now uses the name value for its parameter. ( Iffef2 , I4995e , b/240298691 )
  • AndroidViewModel , AbstractSavedStateViewModelFactory , LifecycleService , ServiceLifecycleDispatcher , and ProcessLifecycleOwner are now written in Kotlin ( I2e771 , Ibae40 , I160d7 , I08884 , I1cda7 , b/240298691 )

Version 2.6.0-alpha04

11 января 2023 г.

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

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

  • LiveData now includes a new isInitialized property that indicates whether an explicit value has ever been set on the LiveData , allowing you to distinguish between liveData.value returning null because no value has ever been set or an explicit null value. ( Ibd018 )

Изменения API

  • The collectAsStateWithLifecycle() APIs of lifecycle-runtime-compose are no longer in experimental status. ( I09d42 , b/258835424 )
  • Lifecycle.launchWhenX methods and Lifecycle.whenX methods have been deprecated as the use of a pausing dispatcher can lead to wasted resources in some cases. It is recommended to use Lifecycle.repeatOnLifecycle . ( Iafc54 , b/248302832 )

Kotlin Conversions

  • ViewTreeLifecycleOwner is now written in Kotlin. This is a source incompatible change for those classes written in Kotlin - you must now directly import and use the Kotlin extension methods on View of androidx.lifecycle.setViewTreeLifecycleOwner and androidx.lifecycle.findViewTreeLifecycleOwner to set and find a previously set owner. This replaces the previous Kotlin extension in lifecycle-runtime-ktx . This is binary compatible and remains source compatible for implementations written in the Java programming language. ( I8a77a , I5234e , b/240298691 )
  • LiveDataReactiveStreams is now written in Kotlin. The Kotlin extensions previously in lifecycle-reactivestreams-ktx have been moved into the lifecycle-reactivestreams module and have become the primary surface for code written in Kotlin. This is a source incompatible change for code written in Kotlin if you were not already using the Kotlin extension method APIs. ( I2b1b9 , I95d22 , b/240298691 )
  • DefaultLifecycleObserver , LifecycleEventObserver , Lifecycle , LifecycleRegistry , LifecycleObserver , and ViewModelStore are now written in Kotlin ( Iadffd , ( I60034 , I8c52c , I9593d , I01fe1 , I59a23 , b/240298691 )

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

  • SavedStateHandle no longer crashes with a ClassCastException when calling get() with the incorrect class type. ( I6ae7c )

Version 2.6.0-alpha03

24 октября 2022 г.

androidx.lifecycle:lifecycle-*:2.6.0-alpha03 is released. Version 2.6.0-alpha03 contains these commits.

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

  • Fixed an issue with constraints between different Lifecycle modules not working as intended. ( I18d0d , b/249686765 )
  • Errors thrown by LifecycleRegistry.moveToState() now include a more helpful error messaging that informs developers of the component causing the error. ( Idf4b2 , b/244910446 )

Version 2.6.0-alpha02

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

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

Изменения API

  • MediatorLiveData now includes a constructor to set an initial value. ( Ib6cc5 , b/151244085 )

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

  • Lifecycle artifacts now include constraints that ensure that all inter-dependent Lifecycle artifacts use the same version, automatically upgrading other dependencies when one is upgraded. b/242871265
  • FlowLiveData.asFlow() now creates a callbackFlow rather than using its own Channel implementation to ensure thread-safety and context preservation. ( I4a8b2 , b/200596935 )
  • FlowLiveData 's asLiveData function will now preserve the initial value of a StateFlow when creating the new LiveData object. ( I3f530 , b/157380488 )
  • From Lifecycle 2.5.1 : Custom implementations of AndroidViewModelFactory now correctly calls the create(modelClass) function when using the stateful constructor with Lifecycle 2.4+ ( I5b315 , b/238011621 )

Version 2.6.0-alpha01

29 июня 2022 г.

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

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

  • Added a new extension on StateFlow and Flow of collectAsStateWithLifecycle that collect from flows and represents its latest value as Compose State in a lifecycle-aware manner. The flow is collected and the new emission is set to the State's value when the lifecycle is at least in a certain Lifecycle.State . When the lifecycle falls below that Lifecycle.State , the flow collection stops and the State's value is not updated. ( I1856e , b/230557927 )

Version 2.5

Version 2.5.1

27 июля 2022 г.

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

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

  • Custom implementations of AndroidViewModelFactory now correctly call the create(modelClass) function when using the stateful AndroidViewModelFactory constructor with Lifecycle 2.4+. ( I5b315 , b/238011621 )

Version 2.5.0

29 июня 2022 г.

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

Important changes since 2.4.0

  • SavedStateHandle now offers a getStateFlow() API that returns a Kotlin StateFlow for monitoring value changes as an alternative to using LiveData .

  • ViewModel CreationExtras - when writing a custom ViewModelProvider.Factory , it is no longer required to extend AndroidViewModelFactory or AbstractSavedStateViewModelFactory to gain access to an Application or SavedStateHandle , respectively. Instead, these fields are provided to every ViewModelProvider.Factory subclass as CreationExtras via the new overload of create : create(Class<T>, CreationExtras) . These extras are provided automatically by your Activity or Fragment when using Activity 1.5.0 and Fragment 1.5.0 , respectively.

    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 now provides a viewModelFactory Kotlin DSL that allows you define your ViewModelProvider.Factory in terms of one or more lambda initializers, one for each particular ViewModel class your custom factory supports, using CreationExtras as the primary data source.

    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 now offers a viewModel() API that takes a lambda factory for creating a ViewModel instance without requiring the creation of a custom ViewModelProvider.Factory .

    // Within a @Composable, you can now skip writing a custom Factory
    // and instead write a lambda to do the initialization of your ViewModel
    val detailViewModel = viewModel {
      // This lambda is only called the first time the ViewModel is created
      // and all CreationExtras are available inside the lambda
      val savedStateHandle = createSavedStateHandle()
      DetailViewModel(savedStateHandle)
    }
    
  • SavedStateHandle Compose Saver Integration - the lifecycle-viewmodel-compose artifact now contains new experimental APIs in SavedStateHandle.saveable that allow rememberSaveable like behavior backed by the SavedStateHandle of a `ViewModel.

    class ListScreenViewModel(handle: SavedStateHandle): ViewModel() {
        // This value survives both configuration changes and process death and recreation
        val editMode by handle.saveable { mutableStateOf(false) }
    }
    
  • Added an addCloseable() API and a new constructor overload that allow you to add one or more Closeable objects to the ViewModel that will be closed when the ViewModel is cleared without requiring any manual work in onCleared() .

    For instance, to create a coroutine scope that you can inject into a ViewModel, but control via testing, you can create a CoroutineScope that implements Closeable :

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

    Which can then be used in your ViewModel constructor while maintaining the same lifetime as viewModelScope :

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

Behavior changes

  • Attempting to move the Lifecycle.State from INITIALIZED to DESTROYED will now always throw an IllegalStateException regardless of whether the Lifecycle has an attached observer.
  • LifecycleRegistry will now clear their observers when they reach the DESTROYED state.

Version 2.5.0-rc02

June 15, 2022

androidx.lifecycle:lifecycle-*:2.5.0-rc02 is released. Version 2.5.0-rc02 contains these commits.

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

  • ViewModelProvider will no longer crash when mixing previous versions of compileOnly Lifecycle dependencies with versions 2.5+. ( I81a66 , b/230454566 )

Version 2.5.0-rc01

11 мая 2022 г.

androidx.lifecycle:lifecycle-*:2.5.0-rc01 is released. Version 2.5.0-rc01 contains these commits.

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

  • MediatorLiveData.addSource() now throws a NullPointerException when passed a null source instead of propagating the null source to observers.( Ibd0fb , b/123085232 )

Version 2.5.0-beta01

April 20, 2022

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

Изменения API

  • Added SavedStateHandle.saveable property delegates to use property names as keys for persisting state into the SavedStateHandle ( I8bb86 , b/225014345 )

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

  • Fixed an issue where nesting one NavHost within another NavHost in a non-primary bottom navigation tab would lead to an IllegalStateException when using multiple back stacks. ( I11bd5 , b/228865698 )

Version 2.5.0-alpha06

6 апреля 2022 г.

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

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

  • Add experimental MutableState overload to SavedStateHandle.saveable for parity with rememberSaveable ( I38cfe , b/224565154 )

Изменения API

  • CreationExtras is now abstract instead of sealed. ( Ib8a7a )

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

  • Fixed an IllegalStateException: Already attached to lifecycleOwner error caused by SavedStateHandleController . ( I7ea47 , b/215406268 )

Version 2.5.0-alpha05

23 марта 2022 г.

androidx.lifecycle:lifecycle-*:2.5.0-alpha05 is released. Version 2.5.0-alpha05 contains these commits.

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

  • The lifecycle-viewmodel-compose module now provides SavedStateHandleSaver , an experimental API that ensures values in a SavedStateHandle are integrated correctly with the same saved instance state that rememberSaveable uses. ( Ia88b7 , b/195689777 )

Изменения API

  • Fixed a compatibility issue with Lifecycle 2.3 and newer Lifecycle versions in Java. ( I52c8a , b/219545060 )

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

  • SavedStateViewFactory now supports using CreationExtras even when it was initialized with a SavedStateRegistryOwner . If extras are provided, the initialized arguments are ignored. ( I6c43b , b/224844583 )

Version 2.5.0-alpha04

9 марта 2022 г.

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

Изменения API

  • SavedStateHandle now offers a getStateFlow() API that returns a Kotlin StateFlow for monitoring value changes as an alternative to using LiveData . ( Iad3ab , b/178037961 )

Version 2.5.0-alpha03

23 февраля 2022 г.

androidx.lifecycle:lifecycle-*:2.5.0-alpha03 is released. Version 2.5.0-alpha03 contains these commits.

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

  • Added an addCloseable() API and a new constructor overload that allow you to add one or more Closeable objects to the ViewModel that will be closed when the ViewModel is cleared without requiring any manual work in onCleared() . ( I55ea0 )
  • lifecycle-viewmodel now provides an InitializerViewModelFactory that allows you to add lambda for handling particular ViewModel classes, using CreationExtras as the primary data source. ( If58fc , b/216687549 )
  • lifecycle-viewmodel-compose now offers a viewModel() API that takes a lambda factory for creating a ViewModel instance without requiring the creation of a custom ViewModelProvider.Factory . ( I97fbb , b/216688927 )

Изменения API

  • You can now create a ViewModel with CreationExtras via lifecycle-viewmodel-compose . ( I08887 , b/216688927 )

Behavior changes

  • Attempting to move the Lifecycle.State from INITIALIZED to DESTROYED will now always throw an IllegalStateException regardless of whether the Lifecycle has an attached observer. ( I7c390 , b/177924329 )
  • LifecycleRegistry will now clear their observers when they reach the DESTROYED state. ( I4f8dd , b/142925860 )

Version 2.5.0-alpha02

9 февраля 2022 г.

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

Изменения API

  • SavedStateHandle and SavedStateViewModelFactory have been converted to Kotlin. This has improved the nullability of the generics in both classes. ( Ib6ce2 , b/216168263 , I9647a , b/177667711 )
  • The LiveData switchMap function parameter can now have a nullable output. ( I40396 , b/132923666 )
  • The LiveData -ktx extensions are now annotated with @CheckResult to enforce that the result is used when calling these functions. ( Ia0f05 , b/207325134 )

Behavior changes

  • SavedStateHandle now properly stores the defaultValue when no value for the specified key exists. ( I1c6ce , b/178510877 )

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

  • From Lifecycle 2.4.1 : Updated lifecycle-process to depend on Startup 1.1.1 to ensure that fixes that prevent ProcessLifecycleInitializer from throwing a StartupException are available by default. ( Ib01df , b/216490724 )
  • There is now an improved error message when custom AndroidViewModel classes have parameters in the wrong order and attempt to create a ViewModel . ( I340f7 , b/177667711 )
  • You can now create a view model via CreationExtras using the AndroidViewModelFactory without setting an application. ( I6ebef , b/217271656 )

Version 2.5.0-alpha01

26 января 2022 г.

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

ViewModel CreationExtras

With this release, we are laying the groundwork for restructuring how a ViewModel is constructed. Instead of a rigid set of subclasses of ViewModelProvider.Factory that each add additional functionality (allowing an Application constructor parameter via AndroidViewModelFactory , allowing a SavedStateHandle constructor parameter via SavedStateViewModelFactory and AbstractSavedStateViewModelFactory , etc.), we are moving to a world of stateless factories that rely on a new concept, CreationExtras . ( Ia7343 , b/188691010 , b/188541057 )

With this change, ViewModelProvider no longer makes direct calls into the previous create(Class<T>) method of ViewModelProvider.Factory . Instead, it calls into a new overload of create : create(Class<T>, CreationExtras) . This means that any direct implementation of the ViewModelProvider.Factory instance now has access to each of these new CreationExtras :

  • ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY : this String provides access to the custom key you passed to ViewModelProvider.get() .
  • ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY provides access to the Application class.
  • SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY provides access to the SavedStateRegistryOwner that is being used to construct this ViewModel.
  • SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY provides access to the ViewModelStoreOwner that is being used to construct this ViewModel.
  • SavedStateHandleSupport.DEFAULT_ARGS_KEY provides access to the Bundle of arguments that should be used to construct a SavedStateHandle .

These extras are provided by default when using Activity 1.5.0-alpha01 , Fragment 1.5.0-alpha01 , and Navigation 2.5.0-alpha01 . If you use an earlier version of those libraries, your CreationExtras will be empty - all of the existing subclasses of ViewModelProvider.Factory have been rewritten to support both the legacy creation path used by earlier versions of those libraries and the CreationExtras path which will be used идем вперед.

These CreationExtras allow you to construct a ViewModelProvider.Factory that passes just the information you need to each ViewModel without relying on a strict hierarchy of Factory subclasses:

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

We use the createSavedStateHandle() Kotlin extension function on CreationExtras from SavedStateHandleSupport to construct a SavedStateHandle only for the one ViewModel that needs it. ( Ia6654 , b/188541057 )

Custom CreationExtras can be provided by overriding getDefaultViewModelCreationExtras() in your ComponentActivity or Fragment , thus making them available to your custom ViewModelProvider.Factory as a built in form of assisted injection. These extras will automatically be made available to your custom Factory when used directly with ViewModelProvider or when using the by viewModels() and by activityViewModels() Kotlin property extensions. ( I79f2b , b/207012584 , b/207012585 , b/207012490 )

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

  • Fixed an issue where the default value provided to a SavedStateHandle would reappear after process death and recreation, even if it was specifically removed from the SavedStateHandle . As a consequence of this, SavedStateHandle will no longer merge default values and restored values together, instead only using the restored values as the source of truth. ( I53a4b )

Version 2.4

Version 2.4.1

9 февраля 2022 г.

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

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

  • Backported from Lifecycle 2.5.0-alpha01 : Fixed an issue where the default value provided to a SavedStateHandle would re-appear after process death and recreation, even if it was specifically removed from the SavedStateHandle . As a consequence of this, SavedStateHandle will no longer merge default values and restored values together, instead only using the restored values as the source of truth. ( I53a4b )
  • lifecycle-process now depends on Androidx Startup 1.1.1 which fixed a regression in where using ProcessLifecycleInitializer would cause an StartupException . ( b/216490724 )

Version 2.4.0

27 октября 2021 г.

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

Important changes since 2.3.0

  • @OnLifecycleEvent was deprecated. LifecycleEventObserver or DefaultLifecycleObserver should be used instead.
  • androidx.lifecycle:lifecycle-viewmodel-compose library was added. It provides viewModel() composable and LocalViewModelStoreOwner .
    • Source-breaking change : ViewModelProvider has been rewritten in Kotlin. ViewModelProvider.Factory.create method no longer allows nullable generic.
  • New coroutines API were added to androidx.lifecycle:lifecycle-runtime-ktx :
  • Lifecycle.repeatOnLifecycle , API that executes a block of code in a coroutine when the Lifecycle is at least in a certain state. The block will cancel and re-launch as the lifecycle moves in and out of the target state;
  • Flow.flowWithLifecycle , API that emits values from the upstream Flow when the lifecycle is at least in a certain state.
  • DefaultLifecycleObserver was moved from lifecycle.lifecycle-common-java8 to lifecycle.lifecycle-common . lifecycle.lifecycle-common-java8 doesn't provide anymore any additional functionality on top of lifecycle.lifecycle-common , so dependency on it can be replaced by lifecycle.lifecycle-common .
  • Non coroutines API from lifecycle-viewmodel-ktx have been moved to the lifecycle-viewmodel module.
  • 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>
    

Version 2.4.0-rc01

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

androidx.lifecycle:lifecycle-*:2.4.0-rc01 is released with no changes from Lifecycle 2.4.0-beta01. Version 2.4.0-rc01 contains these commits.

Version 2.4.0-beta01

September 15, 2021

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

Изменения API

  • @OnLifecycleEvent was deprecated. LifecycleEventObserver or DefaultLifecycleObserver should be used instead. ( I5a8fa )
  • DefaultLifecycleObserver was moved from androidx.lifecycle.lifecycle-common-java8 to androidx.lifecycle.lifecycle-common . androidx.lifecycle.lifecycle-common-java8 doesn't provide anymore any additional functionality on top of androidx.lifecycle.lifecycle-common , so dependency on it can be replaced by androidx.lifecycle.lifecycle-common . ( I021aa )
  • Non coroutines API from lifecycle-viewmodel-ktx have been moved to the lifecycle-viewmodel module. ( I6d5b2 )

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

  • Thanks dmitrilc for fixing a type in the ViewModel documentation! ( #221 )

Version 2.4.0-alpha03

August 4, 2021

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

Изменения 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

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

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 )

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

June 2, 2021

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

Updated to be compatible with Compose version 1.0.0-beta08 .

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

18 мая 2021 г.

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

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

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

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

April 7, 2021

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

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.

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

March 10, 2021

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

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

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

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

  • The viewModel() composable and LocalViewModelStoreOwner were moved from androidx.compose.ui.viewinterop to this artifact in the androidx.lifecycle.viewmodel.compose package. ( I7a374 )

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

Version 2.3.0

Version 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

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

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

May 20, 2020

androidx.lifecycle:lifecycle-*:2.3.0-alpha03 are released. Version 2.3.0-alpha03 contains these commits.

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

  • SavedStateHandle now supports lazy serialization by allowing you to call setSavedStateProvider() for a given key, providing a SavedStateProvider that will get a callback to saveState() when the SavedStateHandle is asked to save its state. ( b/155106862 )
  • A new ViewTreeViewModelStoreOwner.get(View) API allows you to retrieve the containing ViewModelStoreOwner given a View instance. You must upgrade to Activity 1.2.0-alpha05 , Fragment 1.3.0-alpha05 , and AppCompat 1.3.0-alpha01 to populate this correctly. A findViewModelStoreOwner() Kotlin extension has been added to lifecycle-viewmodel-ktx . ( aosp/1295522 )

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

  • Fixed an issue that caused the MutableLiveData Lint checks released in Lifecycle 2.3.0-alpha01 from being published alongside the lifecycle-livedata-core-ktx artifact. ( b/155323109 )

Version 2.3.0-alpha02

29 апреля 2020 г.

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

Изменения API

  • SavedStateViewModelFactory now allows you to pass a null Application to its constructor to better support cases where one is not readily available and support for AndroidViewModel is not needed. ( aosp/1285740 )

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

  • Improved cold start performance by avoiding class verification failure on API 28 and lower devices. ( aosp/1282118 )

Version 2.3.0-alpha01

4 марта 2020 г.

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

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

  • A new ViewTreeLifecycleOwner.get(View) API allows you to retrieve the containing LifecycleOwner given a View instance. You must upgrade to Activity 1.2.0-alpha01 and Fragment 1.3.0-alpha01 to populate this correctly. A findViewTreeLifecycleOwner Kotlin extension is available in lifecycle-runtime-ktx . ( aosp/1182361 , aosp/1182956 )
  • Added a new Lint check that warns you when setting a null value on a MutableLiveData that has been defined in Kotlin as non-null. This is available when using the livedata-core-ktx or livedata-ktx artifacts. ( aosp/1154723 , aosp/1159092 )
  • A new lifecycle-runtime-testing artifact is available that provides a TestLifecycleOwner that implements LifecycleOwner and provides a thread safe mutable Lifecycle . ( aosp/1242438 )

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

  • The lifecycle-runtime artifact now has a unique package name. ( aosp/1187196 )

Version 2.2.0

ViewModel-Savedstate Version 2.2.0

5 февраля 2020 г.

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

Lifecycle ViewModel SavedState now shares the same version as other Lifecycle artifacts. The behavior of 2.2.0 is identical to the behavior of 1.0.0 .

Version 2.2.0

January 22, 2020

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

Important changes since 2.1.0

  • Lifecycle Coroutine Integration : The new lifecycle-runtime-ktx artifact adds integration between Lifecycle and Kotlin coroutines. The lifecycle-livedata-ktx has also been expanded to take advantage of coroutines. See Use Kotlin coroutines with Architecture Components for more details.
  • ViewModelProviders.of() deprecation : ViewModelProviders.of() has been deprecated. You can pass a Fragment or FragmentActivity to the new ViewModelProvider(ViewModelStoreOwner) constructor to achieve the same functionality when using Fragment 1.2.0 .
  • lifecycle-extensions Artifact Deprecation : With the above deprecation of ViewModelProviders.of() , this release marks the deprecation of the last API in lifecycle-extensions and this artifact should now be considered deprecated in its entirety. We strongly recommend depending on the specific Lifecycle artifacts you need (such as lifecycle-service if you're using LifecycleService and lifecycle-process if you're using ProcessLifecycleOwner ) rather than lifecycle-extensions as there will not be a future 2.3.0 release of lifecycle-extensions .
  • Gradle Incremental Annotation Processor : Lifecycle's annotation processor is incremental by default. If your app is written in the Java 8 programming language you can use DefautLifecycleObserver instead; and if it's written in the Java 7 programming language you can use LifecycleEventObserver .

Version 2.2.0-rc03

4 декабря 2019 г.

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

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

  • Fixed a failure occurring when a mocked ViewModel was stored in ViewModelStore and queried later with default factory.
  • Fix a usage of Dispatchers.Main.immediate in launchWhenCreated and similar methods to be called synchronously during corresponding lifecycle event. ( aosp/1156203 )

External contributions

  • Thanks to Anders Järleberg for contributing the fix! ( aosp/1156203 )
  • Thanks to Vsevolod Tolstopyatov from Jetbrains for reviewing an implementation of inlined execution.

Dependency changes

  • Lifecycle Extensions now depends on Fragment 1.2.0-rc03 .

Version 2.2.0-rc02

7 ноября 2019 г.

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

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

  • Fixed a bug in the proguard setup of the library that affected devices running API 28+ if the target API is below 29. ( b/142778206 )

Version 2.2.0-rc01

October 23, 2019

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

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

  • Fixed an issue where launchWhenCreated and related methods would run one frame later than the associated lifecycle method due to its use of Dispatchers.Main instead of Dispatchers.Main.immediate . ( aosp/1145596 )

External contributions

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

Version 2.2.0-beta01

9 октября 2019 г.

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

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

  • Fixed a regression introduced in Lifecycle 2.2.0-alpha05 in the ordering of ProcessLifecycleOwner and the activity's LifecycleOwner moving to started and resumed on Android 10 devices. ( aosp/1128132 )
  • Fixed a regression introduced in Lifecycle 2.2.0-alpha05 which would cause a NullPointerException when using version 2.0.0 or 2.1.0 of lifecycle-process . ( b/141536990 )

Version 2.2.0-alpha05

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

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

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

  • Fixed a race condition in coroutine livedata builder. b/140249349

Version 2.2.0-alpha04

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

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

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

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

External contributions

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

Version 2.2.0-alpha03

7 августа 2019 г.

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

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

Изменения API

  • 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

May 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

Version 1.0.0

January 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

October 23, 2019

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01 is released with no changes from 1.0.0-beta01 . Version 1.0.0-rc01 contains these commits .

ViewModel-Savedstate Version 1.0.0-beta01

9 октября 2019 г.

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

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

  • Fixed an issue where accessing a SavedState ViewModel for the first time in Activity.onActivityResult() would result in an IllegalStateException . ( b/139093676 )
  • Fixed an IllegalStateException when using AbstractSavedStateViewModelFactory . ( b/141225984 )

ViewModel-SavedState Version 1.0.0-alpha05

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

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

Изменения 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

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.

Version 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 .

Version 2.1.0

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

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

Version 2.1.0-rc01

2 июля 2019 г.

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

Version 2.1.0-beta01

May 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

January 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

December 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.

Version 2.0.0

Version 2.0.0

September 21, 2018

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

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

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

Version 2.0.0-beta01

July 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

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.