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

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

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

Артефакт Стабильный релиз Предварительная версия для выпуска Бета-версия Альфа-версия
жизненный цикл-* 2.10.0 - - -
lifecycle-viewmodel-navigation3 2.10.0 - - -
Последнее обновление этой библиотеки: 19 ноября 2025 г.

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

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

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

Котлин

Круто

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

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

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

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

        // 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.10.0"
        val arch_version = "2.2.0"

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

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

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

        // 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.10.0"
        def arch_version = "2.2.0"

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

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

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

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

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

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

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

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

Котлин

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Версия 2.10

Версия 2.10.0

19 ноября 2025 г.

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

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

  • Добавьте компонент rememberLifecycleOwner , позволяющий создавать жизненные циклы с ограниченной областью видимости непосредственно в пользовательском интерфейсе. Это полезно для компонентов, которым необходимо независимо управлять своими собственными жизненными циклами, например, для HorizontalPager , который хочет только RESUMED текущую страницу, или для библиотек, таких как Navigation3 :

    @Composable
    fun MyComposable() {
        // This LifecycleOwner is automatically moved to DESTROYED when
        // it leaves composition and its maxLifecycle is the maximum of either
        // the maxLifecycle you set or the Lifecycle.State of the parentLifecycleOwner
        val lifecycleOwner = rememberLifecycleOwner(
            maxLifecycle = RESUMED,
            parentLifecycleOwner = LocalLifecycleOwner.current,
        )
        CompositionLocalProvider(LocalLifecycleOwner provides lifecycleOwner) {
            val childLifecycleOwner = LocalLifecycleOwner.current
        }
    }
    
  • Артефакт lifecycle-viewmodel-navigation3 предоставляет готовую интеграцию для Navigation3 , позволяющую ограничить область действия экземпляров ViewModel отдельными экранами («записями») с помощью API rememberViewModelStoreNavEntryDecorator() :

    @Composable
    fun MyComposable() {
        NavDisplay(
            backStack = backStack,
            entryDecorators =
                listOf(
                    rememberSaveableStateHolderNavEntryDecorator(),
                    // Add this line to automatically scope ViewModels to each entry
                    rememberViewModelStoreNavEntryDecorator(),
                ),
            entryProvider = entryProvider {
                // Add your entries here
            }
        }
    }
    
  • Добавлена ​​функция-фабрика построителей для CreationExtras , обеспечивающая более удобный и идиоматический API на Kotlin.

    override val defaultViewModelCreationExtras: CreationExtras
        // Use the CreationExtras builder to add in a custom value to the default
        // CreationExtras in your Activity or Fragment
        get() = super.defaultViewModelCreationExtras + CreationExtras {
            this[CustomKey] = "customValue"
       }
    
  • В SavedStateHandle.saved добавлена ​​встроенная поддержка типов, допускающих значение null, что упрощает сохранение и восстановление свойств, допускающих значение null.

  • Пометьте конструкторы SavedStateHandle аннотацией @VisibleForTesting .

  • Минимальный размер SDK изменился с API 21 на API 23.

Версия 2.10.0-rc01

5 ноября 2025 г.

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

Версия 2.10.0-beta01

22 октября 2025 г.

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

Изменения в API

  • ViewModelStoreNavEntryDecoratorDefault был переименован в ViewModelStoreNavEntryDecoratorDefaults с добавлением буквы 's'. ( I6d27b , b/444447434 )

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

  • Функция rememberLifecycleOwner больше не приводит к сбою, если владелец получает событие Lifecycle.Event.ON_DESTROY до перехода в Lifeycle.State.CREATED . ( I6f98e , b/444594991 )

Версия 2.10.0-alpha05

8 октября 2025 г.

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

Изменения в API

  • Метод removeViewModelStoreOnPopCallback() теперь является частью объекта ViewModelStoreNavEntryDecoratorDefault , откуда другие платформы и реализации могут вызывать значение по умолчанию. ( Ia1f23 , b/444447434 )
  • Функция ViewModelStoreNavEntryDecorator была преобразована в класс, чтобы лучше отразить её функциональность в качестве фабрики для NavEntryDecorator , а параметр shouldRemoveViewModelStore был переименован в removeViewModelStoreOnPop , чтобы уточнить, что этот коллбэк вызывается только при удалении элемента из backStack . ( Iefdc5 , b/444447434 )

Версия 2.10.0-alpha04

24 сентября 2025 г.

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

Изменения в API

  • Переработайте компонент LifecycleOwner , добавив в него rememberLifecycleOwner . Теперь функция возвращает LifecycleOwner напрямую. Чтобы предоставить этого владельца подкомпозиции, используйте CompositionLocalProvider . ( Ic57f0 , b/444446629 )
  • Добавьте заглушки KMP в lifecycle-viewmodel-navigation3, чтобы JetBrains мог предоставлять форки, которые заполняют эти цели и, таким образом, поддерживают CMP. ( I44a4c )

Версия 2.10.0-alpha03

27 августа 2025 г.

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

Изменения в API

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

Версия 2.10.0-alpha02

13 августа 2025 г.

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

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

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

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

Изменения в API

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

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

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

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

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

Версия 2.10.0-alpha01

30 июля 2025 г.

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

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

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

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

Изменения в API

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

Версия 2.9

Версия 2.9.4

17 сентября 2025 г.

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

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

  • Исправлена ​​ошибка, из-за которой не применялся плагин Compose Compiler, что приводило к некорректной работе артефактов Lifecycle KMP. ( Ie95bc , b/443096483 , b/443965665 )

Версия 2.9.3

27 августа 2025 г.

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

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

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

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

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

Версия 2.9.2

16 июля 2025 г.

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

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

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

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

Версия 2.9.1

4 июня 2025 г.

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

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

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

Версия 2.9.0

7 мая 2025 г.

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

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

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

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

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

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

Kotlin Multiplatform

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

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

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

Версия 2.9.0-rc01

23 апреля 2025 г.

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

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

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

Версия 2.9.0-beta01

9 апреля 2025 г.

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

Изменения в API

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

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

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

Версия 2.9.0-alpha13

26 марта 2025 г.

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

Версия 2.9.0-alpha12

12 марта 2025 г.

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

Изменения в API

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

Версия 2.9.0-alpha11

26 февраля 2025 г.

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

Изменения в API

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

Версия 2.9.0-alpha10

12 февраля 2025 г.

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

Изменения в API

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

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

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

Версия 2.9.0-alpha09

29 января 2025 г.

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

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

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

Изменения в API

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

Версия 2.9.0-alpha08

11 декабря 2024 г.

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

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

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

Изменения в API

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

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

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

Версия 2.9.0-alpha07

13 ноября 2024 г.

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

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

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

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

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

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

Изменения в API

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

Версия 2.9.0-alpha06

30 октября 2024 г.

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

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

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

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

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

Версия 2.9.0-alpha05

16 октября 2024 г.

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

Версия 2.9.0-alpha04

2 октября 2024 г.

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

Kotlin Multiplatform

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

Версия 2.9.0-alpha03

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

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

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

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

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

Версия 2.9.0-alpha02

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

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

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

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

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

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

Версия 2.9.0-alpha01

7 августа 2024 г.

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

Kotlin Multiplatform

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

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

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

Изменения в API

  • Добавьте фабричную функцию CreationExtras.Key() для упрощения создания анонимных объектов CreationExtras.Key . ( I970ee )
  • CreationExtras теперь включает перегрузки операторов, подобных map, что позволяет идиоматически манипулировать содержимым в Kotlin. Это позволяет использовать операторы in , += и + с CreationExtras . ( Ib4353 )
  • CreationExtras теперь реализованы методы equals , hashCode и toString . ( Ib4353 )
  • NewInstanceFactory теперь доступен для JVM Desktop и Android. ( d3d0892 )
  • Встроенное свойство расширения для безопасного доступа к базовому приложению в языке Kotlin версии 2.0 ( I39df2 )

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

  • Удалено ручное описание доступа к новым API платформы, поскольку это происходит автоматически посредством моделирования API при использовании R8 с AGP 7.3 или более поздней версии (например, R8 версии 3.3) и для всех сборок при использовании AGP 8.1 или более поздней версии (например, D8 версии 8.1). Клиентам, не использующим AGP, рекомендуется обновиться до D8 версии 8.1 или более поздней. Подробнее см. в этой статье . ( If6b4c , b/345472586 )

Версия 2.8

Версия 2.8.7

30 октября 2024 г.

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

Изменения в API

  • androidx.compose.ui.platform.LocalLifecycleOwner теперь доступен в общем наборе исходных кодов (KMP). ( 6a3f5b3 )
  • lifecycle-runtime-compose : артефакты desktop были удалены, и добавлены артефакты -jvmStubs и -linuxx64Stubs . Ни одна из этих целей не предназначена для использования, они являются заполнителями, призванными помочь Jetbrains в работе над Compose. ( 6a3f5b3 )

Версия 2.8.6

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

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

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

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

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

  • В настоящее время среда выполнения Lifecycle Runtime Compose зависит от Compose Runtime 1.7.1

Версия 2.8.5

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

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

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

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

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

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

Версия 2.8.4

24 июля 2024 г.

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

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

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

Версия 2.8.3

1 июля 2024 г.

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

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

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

Версия 2.8.2

12 июня 2024 г.

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

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

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

Версия 2.8.1

29 мая 2024 г.

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

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

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

    class MyViewModel(
      // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate
      viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob()
    ) : ViewModel(viewModelScope) {
      // Use viewModelScope as before, without any code changes
    }
    
    // Allows overriding the viewModelScope in a test
    fun Test() = runTest {
      val viewModel = MyViewModel(backgroundScope)
    }
    
  • ViewModel был переписан на Kotlin и теперь использует AutoClosable вместо Closeable . Теперь он поддерживает добавление объектов AutoCloseable с key , позволяющим получать их через getCloseable() .

  • Теперь вызов LifecycleStartEffect и LifecycleResumeEffect без ключа приводит к ошибке, что соответствует соглашениям, принятым в API DisposableEffect , которые эти API и повторяют.

  • LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) устарел, вместо него используется LiveData.toPublisher(lifecycleOwner) .

  • Расширения Kotlin lifecycle-livedata-core-ktx теперь перемещены в модуль lifecycle-livedata-core .

  • Класс NullSafeMutableLiveData был переработан для предотвращения большого количества ложных срабатываний.

Жизненный цикл Kotlin Многоплатформенная совместимость

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

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

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

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

Артефакт lifecycle-viewmodel и такие API, как ViewModel , ViewModelStore , ViewModelStoreOwner и ViewModelProvider , теперь поставляются в составе артефактов, совместимых с Kotlin Multiplatform.

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

Бинарная совместимость с Android сохранена, но при сравнении API Android с общим API есть несколько заметных изменений:

  • Теперь создание экземпляра ViewModelProvider осуществляется с помощью метода ViewModelProvider.create() , а не путем прямого вызова его конструктора.
  • ViewModelProvider.NewInstanceFactory и ViewModelProvider.AndroidViewModelFactory доступны только на Android.
    • Рекомендуется использовать пользовательские фабрики, наследующие от ViewModelProvider.Factory , и метод create , принимающий CreationExtras , или Kotlin DSL viewModelFactory .
  • Использование ViewModelProvider без пользовательской фабрики на платформах, отличных от JVM, приведет к исключению UnsupportedOperationException . На платформах JVM совместимость сохраняется за счет использования конструктора ViewModel без аргументов, если пользовательская фабрика не предоставлена.
  • В платформах, где Dispatchers.Main недоступен (например, Linux), viewModelScope будет использовать EmptyCoroutineContext в качестве резервного варианта.

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

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

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

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

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

Версия 2.8.0-rc01

1 мая 2024 г.

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

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

  • Исправлена ​​ошибка, из-за которой базовый профиль для классов lifecycle-common не был должным образом упакован. Теперь они упакованы в AAR lifecycle-runtime . ( aosp/3038274 , b/322382422 )
  • Исправлено непреднамеренное изменение порядка очистки экземпляров AutoCloseable , прикрепленных к ViewModel — восстановлен предыдущий порядок: addCloseable(String, AutoCloseable) , затем addClosable(AutoCloseable) , затем onCleared() . ( aosp/3041632 )
  • Улучшено поведение создания по умолчанию для viewModelScope в нативных средах и средах JVM Desktop. ( aosp/3039221 )

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

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

Версия 2.8.0-beta01

17 апреля 2024 г.

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

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

  • Артефакт lifecycle-runtime-compose теперь совместим с Kotlin Multiplatform, его код перемещен в common , и он поставляется с артефактом для Android, что соответствует поддержке многоплатформенности для androidx.compose . ( If7a71 , I4f4a0 , b/331769623 )

Версия 2.8.0-alpha04

3 апреля 2024 г.

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

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

  • Артефакт lifecycle-viewmodel-compose теперь совместим с Kotlin Multiplatform, его код перемещен в common , и он поставляется с артефактом Android, что соответствует поддержке мультиплатформенности androidx.compose . Для учета этого изменения метод Composable viewModel теперь принимает KClass в дополнение к java.lang.Class . ( b/330323282 )

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

  • Компонент NullSafeMutableLiveData был переработан для предотвращения множества ложных срабатываний. ( I2d8c1 , Iafb18 , I03463 , I7ecef )

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

  • Теперь артефакт lifecycle-viewmodel-compose зависит от Compose 1.6.0.
  • Теперь жизненный цикл зависит от Profile Installer 1.3.1 .

Версия 2.8.0-alpha03

20 марта 2024 г.

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

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

  • Теперь ViewModel.viewModelScope является переопределяемым параметром конструктора, позволяющим внедрять собственный диспетчер и SupervisorJob() или переопределять значение по умолчанию, используя backgroundScope доступный в runTest . ( I2817c , b/264598574 )

    class MyViewModel(
      // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate
      viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob()
    ) : ViewModel(viewModelScope) {
      // Use viewModelScope as before, without any code changes
    }
    
    // Allows overriding the viewModelScope in a test
    fun Test() = runTest {
      val viewModel = MyViewModel(backgroundScope)
    }
    

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

Артефакт lifecycle-viewmodel и API, такие как ViewModel , ViewModelStore , ViewModelStoreOwner и ViewModelProvider теперь поставляются в составе артефактов, совместимых с Kotlin Multiplatform. ( b/214568825 )

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

Бинарная совместимость с Android сохранена, но при сравнении API Android с общим API есть несколько заметных изменений:

  • Теперь создание экземпляра ViewModelProvider осуществляется с помощью метода ViewModelProvider.create() , а не путем прямого вызова его конструктора.
  • ViewModelProvider.NewInstanceFactory и ViewModelProvider.AndroidViewModelFactory доступны только на Android.
    • Рекомендуется использовать пользовательские фабрики, наследующие от ViewModelProvider.Factory , и метод create , принимающий CreationExtras , или Kotlin DSL viewModelFactory .
  • Использование ViewModelProvider без пользовательской фабрики на платформах, отличных от JVM, приведет к исключению UnsupportedOperationException . На платформах JVM совместимость сохраняется за счет использования конструктора ViewModel без аргументов, если пользовательская фабрика не предоставлена.
  • В платформах, где Dispatchers.Main недоступен (например, Linux), viewModelScope будет использовать EmptyCoroutineContext в качестве резервного варианта.

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

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

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

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

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

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

Версия 2.8.0-alpha02

21 февраля 2024 г.

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

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

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

Преобразования в Kotlin

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

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

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

Изменения в API

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

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

  • 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

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

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

Версия 2.6.1

22 марта 2023 г.

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

Dependency Updates

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

January 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

Версия 2.5.1

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

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

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

  • 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

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

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

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

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

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

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

  • 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 going forward.

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 )

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

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

Version 1.0.0-alpha07

16 июня 2021 г.

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

Breaking API Changes

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

Version 1.0.0-alpha06

2 июня 2021 г.

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

Updated to be compatible with Compose version 1.0.0-beta08 .

Version 1.0.0-alpha05

18 мая 2021 г.

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

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

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

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

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

Version 1.0.0-alpha04

7 апреля 2021 г.

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

Dependency Changes

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

Version 1.0.0-alpha03

10 марта 2021 г.

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

Изменения в API

  • LocalViewModelStoreOwner.current now returns a nullable ViewModelStoreOwner to better determine whether a ViewModelStoreOwner is available in the current composition. APIs that require a ViewModelStoreOwner , such as viewModel() and NavHost , still throw an exception if a ViewModelStoreOwner is not set. ( Idf39a )

Lifecycle-Viewmodel-Compose Version 1.0.0-alpha02

24 февраля 2021 г.

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

Изменения в API

  • LocalViewModelStoreOwner now has a provides functions that can be used with CompositionLocalProvider , replacing the asProvidableCompositionLocal() API. ( I45d24 )

Lifecycle-Viewmodel-Compose Version 1.0.0-alpha01

10 февраля 2021 г.

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

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

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

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

October 1, 2020

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

Изменения в API

  • The LiveData.observe() Kotlin extension necessary to use lambda syntax is now deprecated as it is not necessary when using Kotlin 1.4. ( I40d3f )

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

Documentation Changes

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

Version 2.3.0-alpha07

19 августа 2020 г.

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

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

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

Version 2.3.0-alpha06

July 22, 2020

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

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

  • Added static helper methods of downFrom(State) , downTo(State) , upFrom(State) , upTo(State) to Lifecycle.Event for generating the Event given a State and transition direction. Added the getTargetState() method that provides the State that the Lifecycle will transition to directly following the Event . ( I00887 )
  • Added Lifecycle.withStateAtLeast APIs that await a lifecycle state and run a non-suspending block of code synchronously at the point of state change, then resume with the result. These APIs differ from the existing when* methods as they do not permit running suspending code and do not employ a custom dispatcher. ( aosp/1326081 )

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

  • LifecycleRegistry now enforces DESTROYED as a terminal state. ( I00887 )
  • LifecycleRegistry now verifies that its methods are called on main thread. It was always a requirement for lifecycles of activities, fragments etc. An addition of observers from non-main threads resulted in hard to catch crashes in runtime. For LifecycleRegistry objects that owned by your own components, you can explicitly opt out from checks by using LifecycleRegistry.createUnsafe(...) , but then you have to ensure that a proper synchronization is in place when this LifecycleRegistry is accessed from different threads ( Ie7280 , b/137392809 )

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

  • Fixed a crash in NullSafeMutableLiveData . ( b/159987480 )
  • Fixed an ObsoleteLintCustomCheck for Lint checks bundled with lifecycle-livedata-core-ktx (and specifically NullSafeMutableLiveData ). ( b/158699265 )

Version 2.3.0-alpha05

24 июня 2020 г.

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

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

  • LiveData now better handles reentrant cases, avoiding duplicate calls to onActive() or onInactive() . ( b/157840298 )
  • Fixed an issue where Lint checks would not run when using Android Studio 4.1 Canary 6 or higher. ( aosp/1331903 )

Version 2.3.0-alpha04

10 июня 2020 г.

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

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

  • Fixed a crash in the NonNullableMutableLiveData Lint check. ( b/157294666 )
  • The NonNullableMutableLiveData Lint check now covers significantly more cases where a null value was set on a MutableLiveData with a non-null type parameter. ( b/156002218 )

Version 2.3.0-alpha03

20 мая 2020 г.

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

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

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

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

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

Version 2.3.0-alpha02

29 апреля 2020 г.

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

Изменения в API

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

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

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

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

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

Версия 2.2.0

22 января 2020 г.

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

Important changes since 2.1.0

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

Version 2.2.0-rc03

4 декабря 2019 г.

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

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

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

External contributions

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

Dependency changes

  • Lifecycle Extensions now depends on Fragment 1.2.0-rc03 .

Version 2.2.0-rc02

7 ноября 2019 г.

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

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

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

Version 2.2.0-rc01

23 октября 2019 г.

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

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

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

External contributions

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

Version 2.2.0-beta01

October 9, 2019

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

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

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

Version 2.2.0-alpha05

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

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

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

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

Version 2.2.0-alpha04

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

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

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

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

External contributions

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

Version 2.2.0-alpha03

7 августа 2019 г.

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

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

API changes

  • ViewModelProviders.of() has been deprecated. You can pass a Fragment or FragmentActivity to the new ViewModelProvider(ViewModelStoreOwner) constructor to achieve the same functionality. ( aosp/1009889 )

Version 2.2.0-alpha02

2 июля 2019 г.

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

API changes

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

Версия 2.2.0-alpha01

7 мая 2019 г.

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

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

  • This release adds new features that adds support for Kotlin coroutines for Lifecycle and LiveData. Detailed documentation on them can be found here .

ViewModel-SavedState Version 1.0.0

Версия 1.0.0

22 января 2020 г.

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

Important features in 1.0.0

  • New SavedStateHandle class was added. It enables your ViewModel classes to access and to contribute to the saved state. This object can be received in constructor of ViewModel class and factories provided by default by Fragments and AppCompatActivity will inject SavedStateHandle automatically.
  • AbstractSavedStateViewModelFactory was added. It allows you to create custom factories for your ViewModel and provide them access to SavedStateHandle .

ViewModel-Savedstate Version 1.0.0-rc03

4 декабря 2019 г.

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

Dependency changes

  • Lifecycle ViewModel SavedState now depends on Lifecycle 2.2.0-rc03 .

Viewmodel-Savedstate Version 1.0.0-rc02

7 ноября 2019 г.

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

Dependency changes

  • Now depends on lifecycle 2.2.0-rc02 .

ViewModel-SavedState Version 1.0.0-rc01

23 октября 2019 г.

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

ViewModel-Savedstate Version 1.0.0-beta01

October 9, 2019

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

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

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

ViewModel-SavedState Version 1.0.0-alpha05

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

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

API changes

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

ViewModel-SavedState Version 1.0.0-alpha03

7 августа 2019 г.

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

Решающие перемены

ViewModel-SavedState Version 1.0.0-alpha02

2 июля 2019 г.

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

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

  • Added SavedStateHandle.getLiveData() overload which accepts a default value.

Изменения в API

  • SavedStateVMFactory is renamed to SavedStateViewModelFactory .
  • AbstractSavedStateVMFactory is renamed to AbstractSavedStateViewModelFactory .

ViewModel-Savedstate Version 1.0.0-alpha01

13 марта 2019 г.

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01 is released. The full commit log for this initial release can be found here .

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

  • Now ViewModels can contribute to savedstate. To do that you use newly introduced viewmodel's factory SavedStateVMFactory and your ViewModel should have a constructor that receives SavedStateHandle object as a parameter.

Версия 2.1.0

Important changes since 2.0.0

  • Added LifecycleEventObserver for the cases when a stream of lifecycle events is needed. It is a public API instead of a hidden GenericLifecycleObserver class.
  • Added ktx extensions for LiveData.observe methods and Transformations.* methods.
  • Added Transformations.distinctUntilChanged , which creates a new LiveData object that does not emit a value until the source LiveData value has been changed.
  • Added coroutine support in ViewModels by adding the extension property ViewModel.viewModelScope .

Версия 2.1.0

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

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

Version 2.1.0-rc01

2 июля 2019 г.

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

Версия 2.1.0-beta01

7 мая 2019 г.

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

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

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

Version 2.1.0-alpha04

3 апреля 2019 г.

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

API changes

  • Breaking change: the underlying API behind by viewModels() and by activityViewModels() has been changed to support a ViewModelStore directly, rather than only a ViewModelStoreOwner . ( aosp/932932 )

Version 2.1.0-alpha03

13 марта 2019 г.

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

API changes

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

Версия 2.1.0-alpha02

30 января 2019 г.

androidx.lifecycle 2.1.0-alpha02 is released.

API changes

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

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

  • Fixed an issue where mock ViewModel instances would crash when the containing ViewModelStore was cleared. b/122273087

Версия 2.1.0-alpha01

17 декабря 2018 г.

androidx.lifecycle 2.1.0-alpha01 is released.

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

  • Added LifecycleEventObserver for the cases when a stream of lifecycle events is needed. It is a public api instead of a hidden GenericLifecycleObserver class.
  • Added ktx extensions for LiveData.observe methods and Transformations.* methods.
  • Method Transformations.distinctUntilChanged was added. It creates a new LiveData object that does not emit a value until the source LiveData value has been changed.
  • Coroutine support in ViewModels: extension property ViewModel.viewModelScope was added.
  • Added ViewModelProvider.KeyedFactory , a factory for ViewModels that receives key and Class in create method.

Версия 2.0.0

Версия 2.0.0

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

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

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

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

Версия 2.0.0-beta01

2 июля 2018 г.

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

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

Pre-AndroidX Versions

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

dependencies {
    def lifecycle_version = "1.1.1"

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

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

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

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

Версия 1.1.1

21 марта 2018 г.

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

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

Версия 1.1.0

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.