Lifecycle

Lifecycle-aware 组件响应另一个组件(如 Activity 和 Fragment)的生命周期状态变化执行操作。这些组件可帮助您生成组织更好、通常更轻量、更易于维护的代码。

此表列出了 androidx.lifecycle 组中的所有 Artifact。

Artifact 稳定版 发布候选版 Beta 版 Alpha 版
lifecycle-* 2.9.1 - - -
lifecycle-viewmodel-navigation3 - - - 1.0.0-alpha01
此库上次更新时间为:2025 年 6 月 4 日

声明依赖项

要添加 Lifecycle 的依赖项,您必须将 Google Maven 代码库添加到您的项目。阅读 Google 的 Maven 代码库以获取更多信息。

在您的应用或模块的 build.gradle 文件中添加所需 Artifact 的依赖项

Kotlin

Groovy

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

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

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

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

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

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

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

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

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

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

Kotlin

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

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

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

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

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

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

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

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

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

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

Java

Groovy

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

Kotlin

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

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

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

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

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

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

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

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

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

有关依赖项的更多信息,请参阅添加构建依赖项

反馈

您的反馈有助于改进 Jetpack。如果您发现新问题或有改进此库的想法,请告诉我们。在创建新问题之前,请查看此库中的现有问题。您可以通过点击星形按钮为您支持的现有问题投票。

创建新问题

有关更多信息,请参阅问题跟踪器文档

Lifecycle ViewModel Navigation3 版本 1.0.0

版本 1.0.0-alpha01

2025 年 5 月 23 日

androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha01 已发布。版本 1.0.0-alpha01 包含这些提交

新功能

  • Lifecycle ViewModel Navigation3 是一个与 Navigation3 一起构建的新库,旨在提供与 ViewModels 的集成。androidx.lifecycle:lifecycle-viewmodel-navigation3 Artifact 提供 ViewModelStoreNavEntryDecorator,它为每个 NavEntry 的内容提供一个唯一的 ViewModelStoreOwner。它还提供 rememberViewModelStoreNavEntryDecorator() 以确保装饰器被配置更改正确处理。
val viewModelDecorator = rememberViewModelStoreNavEntryDecorator()

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

版本 2.9

版本 2.9.1

2025 年 6 月 4 日

androidx.lifecycle:lifecycle-*:2.9.1 已发布。版本 2.9.1 包含这些提交

错误修复

  • 修复了 SavedStateHandle.remove(key) 未清除 SavedStateHandle.getMutableStateFlow(key) 状态的问题。(d5f939, b/418746333

版本 2.9.0

2025 年 5 月 7 日

androidx.lifecycle:lifecycle-*:2.9.0 已发布。版本 2.9.0 包含这些提交

自 2.8.0 以来的重要更改

  • 一个新的 androidx.lifecycle:lifecycle-viewmodel-testing KMP Artifact 现已可用,它提供了一个 ViewModelScenario 类,用于隔离测试 ViewModels,支持 onClearedSavedStateHandle,以及通过 recreate() 测试进程死亡和重新创建。
  • getMutableStateFlow 添加到 SavedStateHandle 以返回一个 MutableStateFlow。这个新函数是 key-exclusive 的,不能与 getLiveData 一起使用。如果您尝试使用两者访问相同的状态,将会抛出异常。
  • CreationExtras 现在包括类似映射的运算符重载,以在 Kotlin 中实现惯用内容操作。它允许 in+=+CreationExtras 一起使用。

KotlinX Serialization 支持

  • 随着 SavedState 1.3.0 中添加的 KotlinX Serialization 支持,我们引入了 saved,一个惰性属性委托,以便轻松地将 @Serializable 类存储在 SavedStateHandle 中,并让这些类在进程死亡和重新创建后自动恢复。请注意,saved 委托是惰性的,在访问之前不会调用 init lambda 或将任何内容保存到 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 兼容,包括 TestLifecycleOwner 等 API。
  • lifecycle-viewmodel-savedstate 模块现在与 KMP 兼容,包括 SavedStateHandle 等 API。
  • androidx.compose.ui.platform.LocalLifecycleOwner 现在在通用源集中可用。
  • NewInstanceFactory 现在可在 JVM 桌面和 Android 目标上使用。

行为变更

  • Lifecycle.DESTROYED 状态是终结状态,任何尝试将 Lifecycle 从此状态移动到任何其他状态的操作都将导致 IllegalStateException
  • SavedStateHandle 不再包含任何返回的 Bundle 为空的 SavedStateProvider.saveState()

版本 2.9.0-rc01

2025 年 4 月 23 日

androidx.lifecycle:lifecycle-*:2.9.0-rc01 已发布。版本 2.9.0-rc01 包含这些提交

版本 2.9.0-beta01

2025 年 4 月 9 日

androidx.lifecycle:lifecycle-*:2.9.0-beta01 已发布。版本 2.9.0-beta01 包含这些提交

API 更改

  • Lifecycle ViewModel Compose 现在使用与 Compose Runtime 1.7.1 及更高版本相同的 Kotlin Multiplatform 设置 - -desktop Artifact 现已移除,并添加了 -jvmStubs-linuxx64Stubs Artifact。这些目标均不打算使用,它们是帮助 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

2025 年 3 月 26 日

androidx.lifecycle:lifecycle-*:2.9.0-alpha13 已发布,无显著公共更改。版本 2.9.0-alpha13 包含这些提交

版本 2.9.0-alpha12

2025 年 3 月 12 日

androidx.lifecycle:lifecycle-*:2.9.0-alpha12 已发布。版本 2.9.0-alpha12 包含这些提交

API 更改

  • 在所有支持的 KMP 平台上,为 ViewModelProvider.get 添加 @MainThread 注解。(I7e8dd, b/397736115
  • SavedState*Delegates 重命名为 SavedState*Delegate。(I8589b, b/399629301

版本 2.9.0-alpha11

2025 年 2 月 26 日

androidx.lifecycle:lifecycle-*:2.9.0-alpha11 已发布。版本 2.9.0-alpha11 包含这些提交

API 更改

  • saved() 委托添加 SavedStateConfig 参数(I39b3a

版本 2.9.0-alpha10

2025 年 2 月 12 日

androidx.lifecycle:lifecycle-*:2.9.0-alpha10 已发布。版本 2.9.0-alpha10 包含这些提交

API 更改

  • MutableStateSerializerlifecycle-viewmodel-compose 移动到 savedstate-compose。(I4f690, b/378895074

外部贡献

  • 为在组合中调用 Lifecycle::currentState 添加了一个新的 Lint 问题,建议改为使用 currentStateAsalue().value 以确保生命周期状态的变化正确触发重新组合。感谢 Steven Schoen!(Iad484

版本 2.9.0-alpha09

2025 年 1 月 29 日

androidx.lifecycle:lifecycle-*:2.9.0-alpha09 已发布。版本 2.9.0-alpha09 包含这些提交

新功能

  • 添加 MutableStateSerializer 以序列化 androidx.compose.runtime.MutableState。(Idfc48, b/378895074

API 更改

  • 将重载的 SavedStateHandle.saved() 委托函数替换为默认参数(Icd1c1
  • AbstractSavedStateViewModelFactory 已弃用,因为它会为每个 ViewModel 创建一个 SavedStateHandle,导致不必要的开销。请改用带有 CreationExtras.createSavedStateHandleViewModelProvider.Factory,以实现更高效的 ViewModel 创建。(Ia920b, b/388590327

版本 2.9.0-alpha08

2024 年 12 月 11 日

androidx.lifecycle:lifecycle-*:2.9.0-alpha08 已发布。版本 2.9.0-alpha08 包含这些提交

新功能

  • 添加 ViewModelScenario.recreate 以模拟系统进程死亡,从而重新创建正在测试的 ViewModel 及所有相关组件。(Id6a69, b/381063087
  • 现在可以通过 ViewOverlay 等视图的分离父级解析通过各自的 findViewTree API 检索到的 LifecycleOwnerViewModelStoreOwner 实例。有关分离视图父级的更多信息,请参阅核心发布说明或 ViewTree.setViewTreeDisjointParent 中的文档。(I800f4

API 更改

  • 使命名和包组织与 SavedStateRegistryOwnerDelegate 更加一致(I8c135, b/376026744

错误修复

  • 此库现在使用 JSpecify 空值注解,这些注解是类型用途的。Kotlin 开发者应使用以下编译器参数来强制执行正确用法:-Xjspecify-annotations=strict(从 Kotlin 编译器 2.1.0 版本开始,这是默认设置)。(Ie4340, b/326456246
  • 记录 ViewModel.onCleared 清理序列。(I586c7, b/363984116

版本 2.9.0-alpha07

2024 年 11 月 13 日

androidx.lifecycle:lifecycle-*:2.9.0-alpha07 已发布。版本 2.9.0-alpha07 包含这些提交

Kotlin Multiplatform 兼容性

  • Lifecycle ViewModel SavedState 现在与 KMP 兼容。这允许您在通用代码中使用 SavedStateHandle。(Ib6394, b/334076622

KotlinX Serialization 支持

  • 随着 SavedState 1.3.0-alpha05 中添加的 KotlinX Serialization 支持,我们引入了 saved,一个惰性属性委托,以便轻松地将 @Serializable 类存储在 SavedStateHandle 中,并让这些类在进程死亡和重新创建后自动恢复。请注意,saved 委托是惰性的,在访问之前不会调用 init lambda 或将任何内容保存到 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。这个新函数是 key-exclusive 的,不能与 getLiveData 一起使用。如果您尝试使用两者访问相同的状态,将会抛出异常。(I04a4f, b/375408415

版本 2.9.0-alpha06

2024 年 10 月 30 日

androidx.lifecycle:lifecycle-*:2.9.0-alpha06 已发布。版本 2.9.0-alpha06 包含这些提交

行为变更

  • Lifecycle.DESTROYED 状态是终结状态,任何尝试将 Lifecycle 从此状态移动到任何其他状态的操作都将导致 IllegalStateException。(I116c4, b/370577987
  • SavedStateHandle 不再包含返回的 Bundle 为空的 SavedStateProvider.saveState()。(I910b5, b/370577987

错误修复

  • Lifecycle 处于 DESTROYED 状态时,Lifecycle.eventFlow 现在会正确完成。(I293b2, b/374043130

版本 2.9.0-alpha05

2024 年 10 月 16 日

androidx.lifecycle:lifecycle-*:2.9.0-alpha05 已发布,无显著更改。版本 2.9.0-alpha05 包含这些提交

版本 2.9.0-alpha04

2024 年 10 月 2 日

androidx.lifecycle:lifecycle-*:2.9.0-alpha04 已发布。版本 2.9.0-alpha04 包含这些提交

Kotlin Multiplatform

  • lifecycle-viewmodel-savedstate 模块现在已配置为 KMP 兼容,为将来在通用源集中提供 SavedStateHandle 等 API 做准备。(I503ed, I48764, b/334076622

版本 2.9.0-alpha03

2024 年 9 月 18 日

androidx.lifecycle:lifecycle-*:2.9.0-alpha03 已发布。版本 2.9.0-alpha03 包含这些提交

错误修复

依赖项更新

版本 2.9.0-alpha02

2024 年 9 月 4 日

androidx.lifecycle:lifecycle-*:2.9.0-alpha02 已发布。版本 2.9.0-alpha02 包含这些提交

错误修复

  • 来自 Lifecycle 2.8.5:更新了 androidx.lifecycle.ReportFragment ProGuard 规则以允许混淆。(ff898e1

外部贡献

  • androidx.compose.ui.platform.LocalLifecycleOwner 移动到通用源集 (KMP)。感谢 JetBrains 的 Ivan Matkov 的贡献。(8cd5d03
  • 来自 Lifecycle 2.8.5:SavedStateHandle.saveable` 扩展委托现在支持可空值。感谢 Roman Kalukiewicz 的贡献。(0d78ea6

版本 2.9.0-alpha01

2024 年 8 月 7 日

androidx.lifecycle:lifecycle-*:2.9.0-alpha01 已发布。版本 2.9.0-alpha01 包含这些提交

Kotlin Multiplatform

  • lifecycle-testing 现在与 KMP 兼容。(Iea41e
  • 添加了对 linuxArm64 Kotlin 多平台目标的支持(I139d3, b/338268719

新功能

  • 一个新的 androidx.lifecycle:lifecycle-viewmodel-testing KMP Artifact 现已可用,它提供了一个 ViewModelScenario 类,用于隔离测试 ViewModels,支持 onCleared(所有平台)和 SavedStateHandle(仅限 Android)。(337f68d, c9b3409, 9799a95c, b/264602919
  • 使用 ViewModelProvider 创建 ViewModel 现在是线程安全的;已删除 @MainThread 注解。(Ifd978, b/237006831

API 更改

  • 添加 CreationExtras.Key() 工厂函数以简化匿名 CreationExtras.Key 对象的创建。(I970ee
  • CreationExtras 现在包括类似映射的运算符重载,以在 Kotlin 中实现惯用内容操作。它允许 in+=+CreationExtras 一起使用。(Ib4353
  • CreationExtras 现在实现 equalshashCodetoString 方法。(Ib4353
  • NewInstanceFactory 现在可在 JVM 桌面和 Android 目标上使用。(d3d0892
  • 内联扩展属性,以便在 Kotlin 语言版本 2.0 中安全地公开底层 Application。(I39df2

错误修复

  • 删除了手动概述对新平台 API 的访问,因为在使用 AGP 7.3 或更高版本(例如 R8 版本 3.3)的 R8 以及使用 AGP 8.1 或更高版本(例如 D8 版本 8.1)的所有构建中,这都会通过 API 建模自动发生。建议不使用 AGP 的客户端更新到 D8 8.1 或更高版本。有关更多详细信息,请参阅本文。(If6b4c, b/345472586

版本 2.8

版本 2.8.7

2024 年 10 月 30 日

androidx.lifecycle:lifecycle-*:2.8.7 已发布。版本 2.8.7 包含这些提交

API 更改

  • androidx.compose.ui.platform.LocalLifecycleOwner 现在在通用源集 (KMP) 中可用。(6a3f5b3
  • lifecycle-runtime-composedesktop Artifact 已移除,并添加了 -jvmStubs-linuxx64Stubs Artifact。这些目标均不打算使用,它们是帮助 Jetbrains Compose 工作的占位符。(6a3f5b3

版本 2.8.6

2024 年 9 月 18 日

androidx.lifecycle:lifecycle-*:2.8.6 已发布。版本 2.8.6 包含这些提交

错误修复

  • NullSafeMutableLiveData Lint 错误改进了对智能转换的支持,避免了误报。(85fed6, b/181042665

依赖项更新

版本 2.8.5

2024 年 9 月 4 日

androidx.lifecycle:lifecycle-*:2.8.5 已发布。版本 2.8.5 包含这些提交

错误修复

  • 更新了 androidx.lifecycle.ReportFragment ProGuard 规则以允许混淆。(ff898e1

外部贡献

  • SavedStateHandle.saveable 扩展委托现在支持可空值。感谢 Roman Kalukiewicz 的贡献。(0d78ea6

版本 2.8.4

2024 年 7 月 24 日

androidx.lifecycle:lifecycle-*:2.8.4 已发布。版本 2.8.4 包含这些提交

错误修复

  • LiveData.asFlow() 现在正确处理返回的 Flow 在接收到已设置在 LiveData 上的值后立即完成的情况(例如,使用 take(1) 时)。(I9c566
  • Lifecycle*Effect 完成现在是幂等的(即,如果 onStopOrDispose 因 Lifecycle 停止而被调用,则除非 Lifecycle 再次返回到 STARTED 状态,否则在处理时不会再次调用)。(I5f607, b/352364595

版本 2.8.3

2024 年 7 月 1 日

androidx.lifecycle:lifecycle-*:2.8.3 已发布。版本 2.8.3 包含这些提交

错误修复

  • 修复了 Lifecycle 2.8 在使用代码缩减时与 Compose 1.6.0 及更低版本向后兼容性问题。(aosp/3133056, b/346808608

版本 2.8.2

2024 年 6 月 12 日

androidx.lifecycle:lifecycle-*:2.8.2 已发布。版本 2.8.2 包含这些提交

错误修复

  • 修复了在使用 Lifecycle 2.8.X 与 Compose 1.6.X 或更早版本时出现 CompositionLocal LocalLifecycleOwner not present 错误的问题 - 您现在可以将 Lifecycle 2.8.2 与任何 Compose 版本一起使用,无需任何变通方法。(aosp/3105647, b/336842920
  • ViewModelProvider 在混合使用先前版本的 compileOnly Lifecycle 依赖项和 2.8+ 版本时将不再崩溃,解决了 LeakCanary 等库的问题。(I80383, b/341792251

版本 2.8.1

2024 年 5 月 29 日

androidx.lifecycle:lifecycle-*:2.8.1 已发布。版本 2.8.1 包含这些提交

错误修复

  • lifecycle-viewmodel-compose 现在仅对 compose-runtime 具有公共依赖项,移除了对 compose-ui 的公共依赖项。Android Artifact 保留其 compose-ui 以实现兼容性。(aosp/3079334, b/339562627
  • ViewModel 的 saveable 集成使用属性委托,现在使用类名作为自动生成键的一部分,避免了多个类使用相同的 SavedStateHandle 时发生冲突。(aosp/3063463

版本 2.8.0

2024 年 5 月 14 日

androidx.lifecycle:lifecycle-*:2.8.0 已发布。版本 2.8.0 包含这些提交

自 2.7.0 以来的重要更改

  • LocalLifecycleOwner 已从 Compose UI 移至 lifecycle-runtime-compose,以便其基于 Compose 的辅助 API 可以在 Compose UI 之外使用。
  • lifecycle-runtime-compose Artifact 现在包含 dropUnlessResumeddropUnlessStarted API,允许您丢弃即使 LifecycleOwner 已低于给定 Lifecycle.State 之后发生的点击或其他事件。例如,这可以与 Navigation Compose 一起使用,以避免在屏幕过渡开始后处理点击事件:onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
  • ViewModel.viewModelScope 现在是一个可重写构造函数参数,允许您注入自己的调度器和 SupervisorJob(),或通过使用 runTest 中可用的 backgroundScope 来覆盖默认值。(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。它现在支持使用 key 添加 AutoCloseable 对象,允许通过 getCloseable() 检索它们。

  • 不带键调用 LifecycleStartEffectLifecycleResumeEffect 现在是错误,遵循与这些 API 镜像的 DisposableEffect API 相同的约定。

  • 弃用了 LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData),推荐使用 LiveData.toPublisher(lifecycleOwner)

  • lifecycle-livedata-core-ktx kotlin 扩展现在已移至 lifecycle-livedata-core 模块。

  • NullSafeMutableLiveData 已重构以避免许多误报。

Lifecycle Kotlin Multiplatform 兼容性

LifecycleLifecycleOwnerLifecycleObserverLifecycle.StateLifecycle.EventLifecycleRegistry 中的核心 Lifecycle API 现在以兼容 Kotlin Multiplatform 的 Artifact 形式发布。

受影响的 Artifact

  • lifecycle-common 将大多数 API 移动到 common,除了 Android 之外还支持 jvm 和 iOS。
  • lifecycle-runtime 将大多数 API 移动到 common,除了 Android 之外还支持 jvm 和 iOS。
  • lifecycle-runtime-ktx 现在为空,所有 API 都已移至 lifecycle-runtime
  • lifecycle-runtime-compose 将所有 API 移动到 common,并发布一个 Android Artifact,与 androidx.compose 的多平台支持相匹配。

ViewModel Kotlin Multiplatform 兼容性

lifecycle-viewmodel Artifact 和 ViewModelViewModelStoreViewModelStoreOwnerViewModelProvider 等 API 现在以兼容 Kotlin Multiplatform 的 Artifact 形式发布。

为了适应这一变化,ViewModelProvider 等方法接受 java.lang.Class<T> 的方法现在有一个接受 kotlin.reflect.KClass<T> 的等效方法。

Android 上的二进制兼容性已保持,但在比较 Android API 界面与通用 API 界面时,有一些值得注意的变化

  • ViewModelProvider 实例的构造现在通过 ViewModelProvider.create() 方法完成,而不是直接调用其构造函数。
  • ViewModelProvider.NewInstanceFactoryViewModelProvider.AndroidViewModelFactory 仅在 Android 上可用。
    • 建议自定义工厂从 ViewModelProvider.Factory 扩展,并使用接受 CreationExtrascreate 方法,或者使用 viewModelFactory Kotlin DSL。
  • 在非 JVM 平台上使用 ViewModelProvider 而不提供自定义工厂将导致 UnsupportedOperationException。在 JVM 平台上,通过在不提供自定义工厂的情况下使用无参数 ViewModel 构造函数来保持兼容性。
  • Dispatchers.Main 不可用的平台(例如 Linux)上,viewModelScope 将回退到 EmptyCoroutineContext

受影响的 Artifact

  • lifecycle-viewmodel 将大多数 API 移动到 common,除了 Android 之外还支持 jvm 和 iOS。
  • lifecycle-viewmodel-ktx 现在为空,所有 API 都已移至 lifecycle-viewmodel
  • lifecycle-viewmodel-compose 将所有 API 移动到 common,并发布一个 Android Artifact,与 androidx.compose 的多平台支持相匹配。

行为变更

  • 如果已添加具有相同 clazz: KClass<VM : ViewModel>initializer,则 InitializerViewModelFactory(包括 viewModelFactory 构建器函数)现在将抛出 IllegalArgumentException。(Ic3a36

已知问题

版本 2.8.0-rc01

2024 年 5 月 1 日

androidx.lifecycle:lifecycle-*:2.8.0-rc01 已发布。版本 2.8.0-rc01 包含这些提交

错误修复

  • 修复了 lifecycle-common 类的 Baseline Profile 未正确打包的问题。这些现在已打包到 lifecycle-runtime AAR 中。(aosp/3038274, b/322382422
  • 修复了 ViewModel 附带的 AutoCloseable 实例清除顺序中无意中的更改 - 恢复了之前的 addCloseable(String, AutoCloseable),然后 addClosable(AutoCloseable),然后 onCleared() 的顺序。(aosp/3041632
  • 改进了适用于原生和 JVM 桌面环境的 viewModelScope 的默认创建行为。(aosp/3039221

外部贡献

  • 感谢 Victor Kropp 改进了 JVM 桌面版的主线程检查。(aosp/3037116

版本 2.8.0-beta01

2024 年 4 月 17 日

androidx.lifecycle:lifecycle-*:2.8.0-beta01 已发布。版本 2.8.0-beta01 包含这些提交

新功能

  • lifecycle-runtime-compose Artifact 现在与 Kotlin Multiplatform 兼容,将其代码移至 common 并发布一个 Android Artifact,与 androidx.compose 的多平台支持相匹配。(If7a71, I4f4a0, b/331769623

版本 2.8.0-alpha04

2024 年 4 月 3 日

androidx.lifecycle:lifecycle-*:2.8.0-alpha04 已发布。版本 2.8.0-alpha04 包含这些提交

新功能

  • lifecycle-viewmodel-compose Artifact 现在与 Kotlin Multiplatform 兼容,将其代码移至 common 并发布一个 Android Artifact,与 androidx.compose 的多平台支持相匹配。为了适应此更改,可组合的 viewModel 方法现在除了接受 java.lang.Class 之外,还接受 KClass。(b/330323282

错误修复

依赖项更新

  • lifecycle-viewmodel-compose Artifact 现在依赖于 Compose 1.6.0。
  • Lifecycle 现在依赖于 Profile Installer 1.3.1

版本 2.8.0-alpha03

2024 年 3 月 20 日

androidx.lifecycle:lifecycle-*:2.8.0-alpha03 已发布。版本 2.8.0-alpha03 包含这些提交

新功能

  • ViewModel.viewModelScope 现在是一个可重写构造函数参数,允许您注入自己的调度器和 SupervisorJob(),或通过使用 runTest 中可用的 backgroundScope 来覆盖默认值。(I2817c, b/264598574

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

Kotlin Multiplatform 兼容性

lifecycle-viewmodel Artifact 和 ViewModelViewModelStoreViewModelStoreOwnerViewModelProvider 等 API 现在以兼容 Kotlin Multiplatform 的 Artifact 形式发布。(b/214568825

为了适应这一变化,ViewModelProvider 等方法接受 java.lang.Class<T> 的方法现在有一个接受 kotlin.reflect.KClass<T> 的等效方法。

Android 上的二进制兼容性已保持,但在比较 Android API 界面与通用 API 界面时,有一些值得注意的变化

  • ViewModelProvider 实例的构造现在通过 ViewModelProvider.create() 方法完成,而不是直接调用其构造函数。
  • ViewModelProvider.NewInstanceFactoryViewModelProvider.AndroidViewModelFactory 仅在 Android 上可用。
    • 建议自定义工厂从 ViewModelProvider.Factory 扩展,并使用接受 CreationExtrascreate 方法,或者使用 viewModelFactory Kotlin DSL。
  • 在非 JVM 平台上使用 ViewModelProvider 而不提供自定义工厂将导致 UnsupportedOperationException。在 JVM 平台上,通过在不提供自定义工厂的情况下使用无参数 ViewModel 构造函数来保持兼容性。
  • Dispatchers.Main 不可用的平台(例如 Linux)上,viewModelScope 将回退到 EmptyCoroutineContext

行为变更

  • 如果已添加具有相同 clazz: KClass<VM : ViewModel>initializer,则 InitializerViewModelFactory(包括 viewModelFactory 构建器函数)现在将抛出 IllegalArgumentException。(Ic3a36

错误修复

  • ViewModel.getCloseable 现在处理重复的键:如果 key 已关联 AutoCloseable 资源,则旧资源将被替换并立即关闭。(Ibeb67
  • 访问 ViewModelviewModelScope 现在是线程安全的。(If4766, b/322407038

外部贡献

  • LocalLifecycleOwner 已从 Compose UI 移至 lifecycle-runtime-compose,以便其基于 Compose 的辅助 API 可以在 Compose UI 之外使用。感谢 Jake Wharton 的贡献。(I6c41b, b/328263448

版本 2.8.0-alpha02

2024 年 2 月 21 日

androidx.lifecycle:lifecycle-*:2.8.0-alpha02 已发布。版本 2.8.0-alpha02 包含这些提交。

新功能

  • 添加了 dropUnlessResumeddropUnlessStarted API,允许您丢弃即使 LifecycleOwner 已低于给定 Lifecycle.State 之后发生的点击或其他事件。例如,这可以与 Navigation Compose 一起使用,以避免在屏幕过渡开始后处理点击事件:onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }Icba83, b/317230685

Kotlin 转换

  • ViewModel 现在用 Kotlin 编写(I16f26, b/214568825
  • lifecycle-viewmodel-ktx Kotlin 扩展现在已移至基础生命周期模块。(Id787b, b/274800183
  • lifecycle-runtime-ktx Kotlin 扩展现在已移至基础生命周期模块。(Ic3686, b/274800183
  • lifecycle-livedata-core-ktx Kotlin 扩展现在已移至基础生命周期模块。(I54a3d, b/274800183

Kotlin Multiplatform 兼容性

  • LifecycleLifecycleOwnerLifecycleObserverLifecycle.StateLifecycle.EventLifecycleRegistry 中的核心 Lifecycle API 现在以兼容 Kotlin Multiplatform 的 Artifact 形式发布。(b/317249252

API 更改

  • 不带键调用 LifecycleStartEffectLifecycleResumeEffect 现在是错误,遵循与这些 API 镜像的 DisposableEffect API 相同的约定。(Ib0e0c, b/323518079
  • ViewModel 现在使用 AutoCloseable 而不是 Closeable。这是一个向后兼容的更改。(I27f8e, b/214568825
  • 弃用了 LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData),推荐使用 LiveData.toPublisher(lifecycleOwner)。(Iabe29, b/262623005

外部贡献

  • 感谢 Jetbrains 的 Ivan Matkov 帮助将 Lifecycle 迁移到 Kotlin Multiplatform。(aosp/2926690, I0c5ac, If445d

版本 2.8.0-alpha01

2024 年 1 月 24 日

androidx.lifecycle:lifecycle-*:2.8.0-alpha01 已发布。版本 2.8.0-alpha01 包含这些提交。

新功能

  • ViewModel 现在支持添加带有 keyCloseable 对象,允许通过 getCloseable() 检索它们。(I3cf63

版本 2.7

版本 2.7.0

2024 年 1 月 10 日

androidx.lifecycle:lifecycle-*:2.7.0 已发布。版本 2.7.0 包含这些提交。

自 2.6.0 以来的重要更改

  • TestLifecycleOwner 现在包含一个挂起函数 setCurrentState(),它确保在返回之前完成状态更改和所有 LifecycleObserver 回调。值得注意的是,与直接设置 currentState 属性不同,这不使用 runBlocking,使其可以在协程中使用,例如由 runTest 提供的协程中。
  • LiveDatamapswitchMap 扩展现在镜像了 distinctUntilChanged 的行为 - 如果 LiveData 已设置 value,则会立即调用 map/switchMap 函数来填充返回的 LiveDatavalue。这确保了初始值将作为第一次组合的一部分设置(与 observeAsState() 一起使用时),但不会改变观察行为 - 源 LiveData 的更新值仍仅在您开始观察 LiveData 后才应用。
  • 此版本修复了 SavedStateHandle 在进程死亡和重新创建后无法正确恢复自定义 Parcelable 类的问题。由于 Android 框架丢失了类型信息,自定义 Parcelables 数组需要额外的工作(手动创建正确类型的类型化数组),并且 getgetLiveDatagetStateFlow 的文档现在明确指出了此限制。
  • LifecycleObserver 关联的 proguard keep 规则已移除。这意味着希望通过反射使用 API 的混淆代码(例如使用早已弃用的 @OnLifecycleEvent 注解)需要为其特定用例提供自己的 keep 规则。

生命周期事件可观察性

  • 作为使用 LifecycleEventObserver 的替代方法,您现在可以通过 Lifecycle.asFlow() 扩展方法观察 Lifecycle.EventFlow
  • Jetpack Compose 用户现在可以使用 LifecycleEventEffect 根据 Lifecycle.Event 运行 Compose 副作用。
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
    viewModel.refreshData()
  }
  // …
}
  • Jetpack Compose 用户可以使用 LifecycleStartEffectLifecycleResumeEffect 来处理事件对 - 分别是启动到停止和恢复到暂停。此 API 镜像了 DisposableEffect 中找到的 API,适用于当状态上升时所做的更改需要在状态下降时恢复的情况。
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleStartEffect(viewModel) {
    val timeTracking = viewModel.startTrackingTimeOnScreen()
    onStopOrDispose {
      timeTracking.stopTrackingTimeOnScreen()
    }
  }
  // …
}

有关更多信息,请参阅在生命周期事件上运行代码

生命周期状态可观察性

  • 当前的 Lifecycle.State 现在可以通过 Lifecycle.currentStateFlow 属性观察,该属性返回一个 StateFlow,其中 value 是当前的 Lifecycle.State
  • Jetpack Compose 用户可以使用 Lifecycle.currentStateAsState() 扩展直接将 Lifecycle.State 作为 Compose State 公开。这等效于(且是更短的替代方案)lifecycle.currentStateFlow.collectAsState()

有关更多信息,请参阅使用流收集生命周期状态

版本 2.7.0-rc02

2023 年 12 月 13 日

androidx.lifecycle:lifecycle-*:2.7.0-rc02 已发布。版本 2.7.0-rc02 包含这些提交。

错误修复

  • 修复了 SavedStateHandle 在进程死亡和重新创建后无法正确恢复自定义 Parcelable 类的问题。由于 Android 框架丢失了类型信息,自定义 Parcelables 数组需要额外的工作(手动创建正确类型的类型化数组),并且 getgetLiveDatagetStateFlow 的文档现在明确指出了此限制。(I0b55a

版本 2.7.0-rc01

2023 年 11 月 15 日

androidx.lifecycle:lifecycle-*:2.7.0-rc01 已发布。版本 2.7.0-rc01 包含这些提交。

错误修复

  • 如果 LifecycleOwner 发生更改,LifecycleStartEffectLifecycleResumeEffect 现在会正确地处理并重新创建效果块。(Ia25c6

版本 2.7.0-beta01

2023 年 11 月 1 日

androidx.lifecycle:lifecycle-*:2.7.0-beta01 已发布,无任何更改。版本 2.7.0-beta01 包含这些提交。

  • Beta 版本更新,此发布版本无重大更改。

版本 2.7.0-alpha03

2023 年 10 月 18 日

androidx.lifecycle:lifecycle-*:2.7.0-alpha03 已发布。版本 2.7.0-alpha03 包含这些提交。

新功能

  • lifecycle-runtime-testing 现在包含一个新的 Lint 检查,以避免在协程内部使用 currentState 字段设置 TestLifecycleOwnerLifecycle.State。Lint 检查现在建议使用挂起函数 setCurrentState,它允许在不阻塞的情况下设置 Lifecycle.State。(Icf728, b/297880630

错误修复

  • 修复了 LiveData.switchMap 的一个问题,即在初始调用和后续调用中返回相同的 LiveData 实例会阻止 LiveData 实例被添加为源。(Ibedcba7

版本 2.7.0-alpha02

2023 年 9 月 6 日

androidx.lifecycle:lifecycle-*:2.7.0-alpha02 已发布。版本 2.7.0-alpha02 包含这些提交。

新功能

  • TestLifecycleOwner 现在包含挂起函数 setCurrentState(),以便用户可以在协程中(例如由 runTest 提供的协程中)使用 TestLifecycleOwner。(I329de, b/259344129

API 更改

  • lifecycle-livedata-ktx 模块的所有文件都已移至主 lifecycle-livedata 模块。(I10c6f, b/274800183

行为变更

  • LiveData.map()LiveData.switchMap() 扩展现在会设置返回的 LiveDatavalue,如果之前的 LiveData 已经设置了值,这确保了在 Jetpack Compose 中使用结果 LiveData 在初始组合时具有正确的状态。(I91d2b, b/269479952
  • 如果 ViewModel 已经收到对 onCleared() 的调用,则 ViewModeladdCloseable() 现在会立即关闭 Closeable。(I4712e, b/280294730

错误修复

  • 来自 Lifecycle 2.6.2:修复了 SavedStateHandle 在进程死亡后无法正确恢复的问题,如果状态已恢复,调用了 save() 但未实际将状态保存到父 SavedStateRegistry 中,然后状态再次恢复。这修复了 rememberSaveable 和 Navigation Compose 的 NavHost 之间的交互。(aosp/2729289

版本 2.7.0-alpha01

2023 年 7 月 26 日

androidx.lifecycle:lifecycle-*:2.7.0-alpha01 已发布。版本 2.7.0-alpha01 包含这些提交。

API 更改

  • Lifecycle.State 现在可以通过 Lifecycle.currentStateFlow 在 Compose 中可观察,该属性返回一个 StateFlow,其中 value 是当前的 Lifecycle.State。(Ib212d, b/209684871
  • Lifecycle.Event 现在可以通过 Lifecycle.asFlow(). 作为 Flow 进行观察。(If2c0f, b/176311030
  • LifecycleResumeEffect API 已添加,用于根据 Lifecycle.Event.ON_RESUMELifecycle.Event.ON_PAUSE 事件回调来运行 Compose SideEffect。(I60386b/235529345
  • LifecycleStartEffect API 已添加,用于根据 Lifecycle.Event.ON_STARTLifecycle.Event.ON_STOP 事件回调来运行 Compose SideEffect。(I5a8d1b/235529345
  • LifecycleEventEffect API 已添加,用于根据 Lifecycle.Event 来运行 Compose SideEffect。(Ic9794b/235529345
  • Lifecycle.collectAsState() 扩展已添加,用于将 Lifecycle.State 直接公开为 Compose State。这等同于(且是更短的替代方案)lifecycle.currentStateFlow.collectAsState()。(I11015b/235529345

错误修复

  • LiveData.distinctUntilChanged() 扩展现在会在前一个 LiveData 已设置值的情况下,设置返回的 LiveDatavalue。这不会改变观察行为 - 来自源 LiveData 的更新值仍只会在您开始观察 distinctUntilChanged() 返回的 LiveData 后才应用。(Ib482f
  • LifecycleObserver 相关的 ProGuard 保留规则已移除。这意味着,希望通过反射使用 API 的 ProGuard 代码需要为其特定用例提供自己的保留规则。(Ia12fd

版本 2.6

版本 2.6.2

2023 年 9 月 6 日

androidx.lifecycle:lifecycle-*:2.6.2 已发布。版本 2.6.2 包含以下提交。

错误修复

  • 修复了 SavedStateHandle 在进程终止后无法正确恢复的问题,如果状态已恢复,在父级 SavedStateRegistry 中调用 save() 但未实际保存状态,然后再次恢复状态。这修复了 rememberSaveable 和 Navigation Compose 的 NavHost 之间的交互。(aosp/2729289

版本 2.6.1

2023 年 3 月 22 日

androidx.lifecycle:lifecycle-*:2.6.1 已发布。版本 2.6.1 包含以下提交。

依赖项更新

版本 2.6.0

2023 年 3 月 8 日

androidx.lifecycle:lifecycle-*:2.6.0 已发布。版本 2.6.0 包含以下提交。

自 2.5.0 以来发生的重要变化

  • LiveData 现在包含一个新属性 isInitialized,它指示 LiveData 是否曾被明确设置过值,从而允许您区分 liveData.value 返回 null 是因为从未设置过值还是因为明确设置了 null 值。
  • MediatorLiveData 现在包含一个用于设置初始值的构造函数。
  • StateFlowFlow 上添加了一个新的扩展 collectAsStateWithLifecycle(),它从流中收集并以生命周期感知的方式将其最新值表示为 Compose State。
  • Lifecycle.launchWhenX 方法和 Lifecycle.whenX 方法已被弃用,因为在某些情况下使用暂停调度程序可能导致资源浪费。建议使用 Lifecycle.repeatOnLifecycle。有关一次性挂起工作的更多信息,请参阅此说明,了解其为何本质上不安全。
  • Kotlin 转换 - 大量 Lifecycle 类已转换为 Kotlin。所有转换后的类仍保持与早期版本的二进制兼容性。以下类对于用 Kotlin 编写的类具有源不兼容的更改:ViewTreeLifecycleOwnerLiveDataReactiveStreamsHasDefaultViewModelProviderFactoryViewTreeViewModelStoreOwnerTransformationsViewModelStoreOwnerLifecycleOwner

下表提供了新版生命周期的源转换。

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
  • 在 Kotlin 中创建的 ObserveronChanged 方法的可空性现在与泛型类型的可空性匹配。如果希望 Observer.onChanged() 接受可空类型,则必须使用可空类型实例化 Observer
  • 以下类也已转换为 Kotlin,但仍保持源兼容性:DefaultLifecycleObserverLifecycleEventObserverLifecycleLifecycleRegistryLifecycleObserverViewModelStoreAndroidViewModelAbstractSavedStateViewModelFactoryLifecycleServiceServiceLifecycleDispatcherProcessLifecycleOwner

版本 2.6.0-rc01

2023 年 2 月 22 日

androidx.lifecycle:lifecycle-*:2.6.0-rc01 已发布。版本 2.6.0-rc01 包含以下提交。

错误修复

  • LiveData.distinctUntilChanged() 扩展现在会在前一个 LiveData 已设置值的情况下,设置返回的 LiveDatavalue。这不会改变观察行为 - 来自源 LiveData 的更新值仍只会在您开始观察 distinctUntilChanged() 返回的 LiveData 后才应用。(Ib482f

版本 2.6.0-beta01

2023 年 2 月 8 日

androidx.lifecycle:lifecycle-*:2.6.0-beta01 已发布。版本 2.6.0-beta01 包含以下提交。

Kotlin 转换

  • LifecycleOwner 现在使用 Kotlin 编写。这对于用 Kotlin 编写的类是源不兼容的更改 - 它们现在必须覆盖 lifecycle 属性,而不是实现之前的 getLifecycle() 函数。(I75b4bb/240298691
  • ViewModelStoreOwner 现在使用 Kotlin 编写。这对于用 Kotlin 编写的类是源不兼容的更改 - 它们现在必须覆盖 viewModelStore 属性,而不是实现之前的 getViewModelStore() 函数。(I86409b/240298691
  • LifecycleOwner 上提供 lifecycleScope 字段的 Kotlin 扩展已从 lifecycle-runtime-ktx 移至 lifecycle-common 工件。(I41d78b/240298691
  • Lifecycle 上提供 coroutineScope 字段的 Kotlin 扩展已从 lifecycle-runtime-ktx 移至 lifecycle-common 工件。(Iabb91b/240298691

版本 2.6.0-alpha05

2023 年 1 月 25 日

androidx.lifecycle:lifecycle-*:2.6.0-alpha05 已发布。版本 2.6.0-alpha05 包含以下提交。

Kotlin 转换

  • Transformations 现在使用 Kotlin 编写。这对于用 Kotlin 编写的、直接使用 Transformations.map 等语法的类来说是源不兼容的更改 - Kotlin 代码必须现在使用 Kotlin 扩展方法语法,该语法以前仅在使用 lifecycle-livedata-ktx 时可用。当使用 Java 编程语言时,接受 androidx.arch.core.util.Function 方法的这些方法版本已被弃用,并替换为接受 Kotlin Function1 的版本。此更改保持二进制兼容性。(I8e14f
  • ViewTreeViewModelStoreOwner 现在使用 Kotlin 编写。这对于用 Kotlin 编写的类是源不兼容的更改 - 您现在必须直接导入并使用 View 上的 Kotlin 扩展方法 androidx.lifecycle.setViewTreeViewModelStoreOwnerandroidx.lifecycle.findViewTreeViewModelStoreOwner 来设置和查找以前设置的所有者。这与二进制兼容,并且对于用 Java 编程语言实现的仍保持源兼容。(Ia06d8Ib22d8b/240298691
  • HasDefaultViewModelProviderFactory 接口现在使用 Kotlin 编写。这对于用 Kotlin 编写的类是源不兼容的更改 - 它们现在必须覆盖 defaultViewModelProviderFactorydefaultViewModelCreationExtras 属性,而不是实现之前的相应函数。(Iaed9cb/240298691
  • Observer 现在使用 Kotlin 编写。其 onChanged() 方法现在将其参数的名称更改为 value。(Iffef2I4995eb/240298691
  • AndroidViewModelAbstractSavedStateViewModelFactoryLifecycleServiceServiceLifecycleDispatcherProcessLifecycleOwner 现在使用 Kotlin 编写。(I2e771Ibae40I160d7I08884I1cda7b/240298691

版本 2.6.0-alpha04

2023 年 1 月 11 日

androidx.lifecycle:lifecycle-*:2.6.0-alpha04 已发布。版本 2.6.0-alpha04 包含以下提交。

新功能

  • LiveData 现在包含一个新属性 isInitialized,它指示 LiveData 是否曾被明确设置过值,从而允许您区分 liveData.value 返回 null 是因为从未设置过值还是因为明确设置了 null 值。(Ibd018

API 更改

  • lifecycle-runtime-composecollectAsStateWithLifecycle() API 不再处于实验状态。(I09d42b/258835424
  • Lifecycle.launchWhenX 方法和 Lifecycle.whenX 方法已被弃用,因为在某些情况下使用暂停调度程序可能导致资源浪费。建议使用 Lifecycle.repeatOnLifecycle。(Iafc54b/248302832

Kotlin 转换

  • ViewTreeLifecycleOwner 现在使用 Kotlin 编写。这对于用 Kotlin 编写的类是源不兼容的更改 - 您现在必须直接导入并使用 View 上的 Kotlin 扩展方法 androidx.lifecycle.setViewTreeLifecycleOwnerandroidx.lifecycle.findViewTreeLifecycleOwner 来设置和查找以前设置的所有者。这替换了之前在 lifecycle-runtime-ktx 中的 Kotlin 扩展。这与二进制兼容,并且对于用 Java 编程语言实现的仍保持源兼容。(I8a77aI5234eb/240298691
  • LiveDataReactiveStreams 现在使用 Kotlin 编写。以前在 lifecycle-reactivestreams-ktx 中的 Kotlin 扩展已移至 lifecycle-reactivestreams 模块,并成为用 Kotlin 编写的代码的主要接口。这对于用 Kotlin 编写的代码是源不兼容的更改,如果您之前没有使用 Kotlin 扩展方法 API 的话。(I2b1b9I95d22b/240298691
  • DefaultLifecycleObserverLifecycleEventObserverLifecycleLifecycleRegistryLifecycleObserverViewModelStore 现在使用 Kotlin 编写。(IadffdI60034I8c52cI9593dI01fe1I59a23b/240298691

错误修复

  • SavedStateHandle 在使用不正确的类类型调用 get() 时不再会因 ClassCastException 崩溃。(I6ae7c

版本 2.6.0-alpha03

2022 年 10 月 24 日

androidx.lifecycle:lifecycle-*:2.6.0-alpha03 已发布。版本 2.6.0-alpha03 包含以下提交。

错误修复

  • 修复了不同 Lifecycle 模块之间的约束未按预期工作的问题。(I18d0db/249686765
  • LifecycleRegistry.moveToState() 抛出的错误现在包含更有用的错误消息,它会告知开发者导致错误的组件。(Idf4b2b/244910446

版本 2.6.0-alpha02

2022 年 9 月 7 日

androidx.lifecycle:lifecycle-*:2.6.0-alpha02 已发布。版本 2.6.0-alpha02 包含以下提交。

API 更改

  • MediatorLiveData 现在包含一个用于设置初始值的构造函数。(Ib6cc5b/151244085

错误修复

  • Lifecycle 工件现在包含约束,这些约束确保所有相互依赖的 Lifecycle 工件使用相同的版本,并在其中一个升级时自动升级其他依赖项。b/242871265
  • FlowLiveData.asFlow() 现在创建 callbackFlow,而不是使用其自己的 Channel 实现,以确保线程安全和上下文保留。(I4a8b2b/200596935
  • FlowLiveDataasLiveData 函数现在在创建新的 LiveData 对象时将保留 StateFlow 的初始值。(I3f530b/157380488
  • 来自 Lifecycle 2.5.1:使用 Stateful 构造函数和 Lifecycle 2.4+ 时,AndroidViewModelFactory 的自定义实现现在会正确调用 create(modelClass) 函数。(I5b315b/238011621

版本 2.6.0-alpha01

2022 年 6 月 29 日

androidx.lifecycle:lifecycle-*:2.6.0-alpha01 已发布。版本 2.6.0-alpha01 包含以下提交。

新功能

  • StateFlowFlow 上添加了一个新的扩展 collectAsStateWithLifecycle,它从流中收集并以生命周期感知的方式将其最新值表示为 Compose State。当生命周期至少处于某个 Lifecycle.State 时,流被收集,新发出的值被设置为 State 的值。当生命周期低于该 Lifecycle.State 时,流收集停止,State 的值不再更新。(I1856eb/230557927

版本 2.5

版本 2.5.1

2022 年 7 月 27 日

androidx.lifecycle:lifecycle-*:2.5.1 已发布。版本 2.5.1 包含以下提交。

错误修复

  • 使用 Stateful AndroidViewModelFactory 构造函数和 Lifecycle 2.4+ 时,AndroidViewModelFactory 的自定义实现现在会正确调用 create(modelClass) 函数。(I5b315b/238011621

版本 2.5.0

2022 年 6 月 29 日

androidx.lifecycle:lifecycle-*:2.5.0 已发布。版本 2.5.0 包含以下提交。

自 2.4.0 以来发生的重要变化

  • SavedStateHandle 现在提供了一个 getStateFlow() API,它返回一个 Kotlin StateFlow,用于监控值变化,作为使用 LiveData 的替代方案。

  • ViewModel CreationExtras - 编写自定义 ViewModelProvider.Factory 时,不再需要扩展 AndroidViewModelFactoryAbstractSavedStateViewModelFactory 才能访问 ApplicationSavedStateHandle。相反,这些字段通过新的 create 重载 create(Class<T>, CreationExtras) 作为 CreationExtras 提供给每个 ViewModelProvider.Factory 子类。当分别使用 Activity 1.5.0Fragment 1.5.0 时,这些额外项会自动由您的 Activity 或 Fragment 提供。

    class CustomFactory : ViewModelProvider.Factory {
        override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
            return when (modelClass) {
                HomeViewModel::class -> {
                    // Get the Application object from extras
                    val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY])
                    // Pass it directly to HomeViewModel
                    HomeViewModel(application)
                }
                DetailViewModel::class -> {
                    // Create a SavedStateHandle for this ViewModel from extras
                    val savedStateHandle = extras.createSavedStateHandle()
                    DetailViewModel(savedStateHandle)
                }
                else -> throw IllegalArgumentException("Unknown class $modelClass")
            } as T
        }
    }
    
  • lifecycle-viewmodel 现在提供了一个 viewModelFactory Kotlin DSL,它允许您根据一个或多个 lambda 初始化程序定义 ViewModelProvider.Factory,其中每个初始化程序对应您的自定义工厂支持的特定 ViewModel 类,并使用 CreationExtras 作为主要数据源。

    val customFactory = viewModelFactory {
        // The return type of the lambda automatically sets what class this lambda handles
        initializer {
            // Get the Application object from extras provided to the lambda
            val application = checkNotNull(get(ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY))
            HomeViewModel(application)
        }
        initializer {
            val savedStateHandle = createSavedStateHandle()
            DetailViewModel(savedStateHandle)
        }
    }
    
  • lifecycle-viewmodel-compose 现在提供了一个 viewModel() API,它接受一个 lambda 工厂用于创建 ViewModel 实例,而无需创建自定义 ViewModelProvider.Factory

    // Within a @Composable, you can now skip writing a custom Factory
    // and instead write a lambda to do the initialization of your ViewModel
    val detailViewModel = viewModel {
      // This lambda is only called the first time the ViewModel is created
      // and all CreationExtras are available inside the lambda
      val savedStateHandle = createSavedStateHandle()
      DetailViewModel(savedStateHandle)
    }
    
  • SavedStateHandle Compose Saver 集成 - lifecycle-viewmodel-compose 工件现在包含 SavedStateHandle.saveable 中的新实验性 API,它允许由 `ViewModel` 的 SavedStateHandle 支持的类似 rememberSaveable 的行为。

    class ListScreenViewModel(handle: SavedStateHandle): ViewModel() {
        // This value survives both configuration changes and process death and recreation
        val editMode by handle.saveable { mutableStateOf(false) }
    }
    
  • 添加了 addCloseable() API 和新的构造函数重载,允许您向 ViewModel 添加一个或多个 Closeable 对象,这些对象将在 ViewModel 清理时关闭,而无需在 onCleared() 中进行任何手动操作。

    例如,要创建一个可以注入到 ViewModel 中但通过测试控制的协程作用域,您可以创建一个实现 CloseableCoroutineScope

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

    然后可以在您的 ViewModel 构造函数中使用,同时保持与 viewModelScope 相同的生命周期

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

行为变化

  • 尝试将 Lifecycle.StateINITIALIZED 移动到 DESTROYED 现在总是会抛出 IllegalStateException,无论 Lifecycle 是否有附加的观察者。
  • LifecycleRegistry 在达到 DESTROYED 状态时将清除其观察者。

版本 2.5.0-rc02

2022 年 6 月 15 日

androidx.lifecycle:lifecycle-*:2.5.0-rc02 已发布。版本 2.5.0-rc02 包含以下提交。

错误修复

  • 当混合使用旧版本的 compileOnly Lifecycle 依赖项和 2.5+ 版本时,ViewModelProvider 不再崩溃。(I81a66b/230454566

版本 2.5.0-rc01

2022 年 5 月 11 日

androidx.lifecycle:lifecycle-*:2.5.0-rc01 已发布。版本 2.5.0-rc01 包含以下提交。

错误修复

  • MediatorLiveData.addSource() 现在在传入 null 源时会抛出 NullPointerException,而不是将 null 源传播给观察者。(Ibd0fbb/123085232

版本 2.5.0-beta01

2022 年 4 月 20 日

androidx.lifecycle:lifecycle-*:2.5.0-beta01 已发布。版本 2.5.0-beta01 包含以下提交。

API 更改

  • 添加了 SavedStateHandle.saveable 属性委托,以使用属性名称作为键来将状态持久化到 SavedStateHandle 中。(I8bb86b/225014345

错误修复

  • 修复了在非主底部导航选项卡中嵌套 NavHost 会在使用多个返回堆栈时导致 IllegalStateException 的问题。(I11bd5b/228865698

版本 2.5.0-alpha06

2022 年 4 月 6 日

androidx.lifecycle:lifecycle-*:2.5.0-alpha06 已发布。版本 2.5.0-alpha06 包含以下提交。

新功能

  • 添加了实验性 MutableState 重载到 SavedStateHandle.saveable,以与 rememberSaveable 对齐。(I38cfeb/224565154

API 更改

  • CreationExtras 现在是抽象的而不是密封的。(Ib8a7a

错误修复

  • 修复了由 SavedStateHandleController 导致的 IllegalStateException: Already attached to lifecycleOwner 错误。(I7ea47b/215406268

版本 2.5.0-alpha05

2022 年 3 月 23 日

androidx.lifecycle:lifecycle-*:2.5.0-alpha05 已发布。版本 2.5.0-alpha05 包含以下提交。

新功能

  • lifecycle-viewmodel-compose 模块现在提供 SavedStateHandleSaver,这是一个实验性 API,可确保 SavedStateHandle 中的值与 rememberSaveable 使用的相同已保存实例状态正确集成。(Ia88b7b/195689777

API 更改

  • 修复了 Lifecycle 2.3 和更新版本 Lifecycle 在 Java 中的兼容性问题。(I52c8ab/219545060

错误修复

  • SavedStateViewFactory 现在支持使用 CreationExtras,即使它已用 SavedStateRegistryOwner 初始化。如果提供了额外项,则忽略初始化的参数。(I6c43bb/224844583

版本 2.5.0-alpha04

2022 年 3 月 9 日

androidx.lifecycle:lifecycle-*:2.5.0-alpha04 已发布。版本 2.5.0-alpha04 包含以下提交。

API 更改

  • SavedStateHandle 现在提供了一个 getStateFlow() API,它返回一个 Kotlin StateFlow,用于监控值变化,作为使用 LiveData 的替代方案。(Iad3abb/178037961

版本 2.5.0-alpha03

2022 年 2 月 23 日

androidx.lifecycle:lifecycle-*:2.5.0-alpha03 已发布。版本 2.5.0-alpha03 包含以下提交。

新功能

  • 添加了 addCloseable() API 和新的构造函数重载,允许您向 ViewModel 添加一个或多个 Closeable 对象,这些对象将在 ViewModel 清理时关闭,而无需在 onCleared() 中进行任何手动操作。(I55ea0
  • lifecycle-viewmodel 现在提供了一个 InitializerViewModelFactory,它允许您添加 lambda 来处理特定的 ViewModel 类,并使用 CreationExtras 作为主要数据源。(If58fcb/216687549
  • lifecycle-viewmodel-compose 现在提供了一个 viewModel() API,它接受一个 lambda 工厂用于创建 ViewModel 实例,而无需创建自定义 ViewModelProvider.Factory。(I97fbbb/216688927

API 更改

  • 您现在可以通过 lifecycle-viewmodel-compose 使用 CreationExtras 创建 ViewModel。(I08887b/216688927

行为变化

  • 尝试将 Lifecycle.StateINITIALIZED 移动到 DESTROYED 现在总是会抛出 IllegalStateException,无论 Lifecycle 是否有附加的观察者。(I7c390b/177924329
  • LifecycleRegistry 在达到 DESTROYED 状态时将清除其观察者。(I4f8ddb/142925860

版本 2.5.0-alpha02

2022 年 2 月 9 日

androidx.lifecycle:lifecycle-*:2.5.0-alpha02 已发布。版本 2.5.0-alpha02 包含以下提交。

API 更改

  • SavedStateHandleSavedStateViewModelFactory 已转换为 Kotlin。这改善了这两个类中泛型的可空性。(Ib6ce2b/216168263I9647ab/177667711
  • LiveDataswitchMap 函数参数现在可以具有可为空的输出。(I40396b/132923666
  • LiveData -ktx 扩展现在使用 @CheckResult 进行注释,以强制在调用这些函数时使用结果。(Ia0f05b/207325134

行为变化

  • SavedStateHandle 现在正确存储了当指定键没有值时的 defaultValue。(I1c6ceb/178510877

错误修复

  • 来自 Lifecycle 2.4.1:更新了 lifecycle-process 以依赖于 Startup 1.1.1,以确保默认情况下可以使用防止 ProcessLifecycleInitializer 抛出 StartupException 的修复。(Ib01dfb/216490724
  • 现在,当自定义 AndroidViewModel 类的参数顺序错误并尝试创建 ViewModel 时,会显示改进的错误消息。(I340f7b/177667711
  • 您现在可以使用 AndroidViewModelFactory 通过 CreationExtras 创建视图模型,而无需设置应用程序。(I6ebefb/217271656

版本 2.5.0-alpha01

2022 年 1 月 26 日

androidx.lifecycle:lifecycle-*:2.5.0-alpha01 已发布。版本 2.5.0-alpha01 包含以下提交。

ViewModel CreationExtras

在此版本中,我们正在为重构 ViewModel 的构建方式奠定基础。我们正在从一个僵化的 ViewModelProvider.Factory 子类集(每个子类添加额外功能,例如通过 AndroidViewModelFactory 允许 Application 构造函数参数,通过 SavedStateViewModelFactoryAbstractSavedStateViewModelFactory 允许 SavedStateHandle 构造函数参数等)转向一个无状态工厂的世界,这些工厂依赖于一个新概念:CreationExtras。(Ia7343b/188691010b/188541057

在此更改后,ViewModelProvider 不再直接调用 ViewModelProvider.Factory 的先前 create(Class<T>) 方法。相反,它调用 create 的新重载:create(Class<T>, CreationExtras)。这意味着 ViewModelProvider.Factory 实例的任何直接实现现在都可以访问这些新的 CreationExtras

  • ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY:此 String 提供对您传递给 ViewModelProvider.get() 的自定义键的访问。
  • ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY 提供对 Application 类的访问。
  • SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY 提供对用于构造此 ViewModel 的 SavedStateRegistryOwner 的访问。
  • SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY 提供对用于构造此 ViewModel 的 ViewModelStoreOwner 的访问。
  • SavedStateHandleSupport.DEFAULT_ARGS_KEY 提供对应用于构造 SavedStateHandle 的参数 Bundle 的访问。

当使用 Activity 1.5.0-alpha01Fragment 1.5.0-alpha01Navigation 2.5.0-alpha01 时,默认会提供这些额外参数。如果您使用这些库的早期版本,则您的 CreationExtras 将为空 - ViewModelProvider.Factory 的所有现有子类都已重写,以支持这些库早期版本使用的传统创建路径和未来将使用的 CreationExtras 路径。

这些 CreationExtras 允许您构建一个 ViewModelProvider.Factory,它将您需要的信息传递给每个 ViewModel,而无需依赖于严格的 Factory 子类层次结构

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

我们使用 SavedStateHandleSupportCreationExtras 上的 createSavedStateHandle() Kotlin 扩展函数,仅为需要它的一个 ViewModel 构造 SavedStateHandle。(Ia6654b/188541057

可以通过覆盖您的 ComponentActivityFragment 中的 getDefaultViewModelCreationExtras() 来提供自定义 CreationExtras,从而使它们可以作为内置的辅助注入形式供您的自定义 ViewModelProvider.Factory 使用。当直接与 ViewModelProvider 一起使用或使用 by viewModels()by activityViewModels() Kotlin 属性扩展时,这些额外项将自动提供给您的自定义 Factory。(I79f2bb/207012584b/207012585b/207012490

错误修复

  • 修复了一个问题,即提供给 SavedStateHandle 的默认值在进程终止和重新创建后会再次出现,即使它已从 SavedStateHandle 中明确移除。因此,SavedStateHandle 将不再合并默认值和恢复值,而是仅使用恢复值作为事实来源。(I53a4b

版本 2.4

版本 2.4.1

2022 年 2 月 9 日

androidx.lifecycle:lifecycle-*:2.4.1 已发布。版本 2.4.1 包含以下提交。

错误修复

  • Lifecycle 2.5.0-alpha01 回移植:修复了一个问题,即提供给 SavedStateHandle 的默认值在进程终止和重新创建后会再次出现,即使它已从 SavedStateHandle 中明确移除。因此,SavedStateHandle 将不再合并默认值和恢复值,而是仅使用恢复值作为事实来源。(I53a4b
  • lifecycle-process 现在依赖于 Androidx Startup 1.1.1,后者修复了使用 ProcessLifecycleInitializer 会导致 StartupException 的回归问题。(b/216490724

版本 2.4.0

2021 年 10 月 27 日

androidx.lifecycle:lifecycle-*:2.4.0 已发布。版本 2.4.0 包含以下提交。

自 2.3.0 以来发生的重要变化

  • @OnLifecycleEvent 已弃用。应改用 LifecycleEventObserverDefaultLifecycleObserver
  • androidx.lifecycle:lifecycle-viewmodel-compose 库已添加。它提供 viewModel() 可组合函数和 LocalViewModelStoreOwner
    • 源破坏性更改ViewModelProvider 已使用 Kotlin 重写。ViewModelProvider.Factory.create 方法不再允许可空泛型。
  • 新的协程 API 已添加到 androidx.lifecycle:lifecycle-runtime-ktx
  • Lifecycle.repeatOnLifecycle:当 Lifecycle 至少处于某个特定状态时,在协程中执行一段代码的 API。当生命周期进入或退出目标状态时,该代码块将取消并重新启动;
  • Flow.flowWithLifecycle:当生命周期至少处于某个特定状态时,从上游 Flow 发出值的 API。
  • DefaultLifecycleObserver 已从 lifecycle.lifecycle-common-java8 移至 lifecycle.lifecycle-commonlifecycle.lifecycle-common-java8 不再在 lifecycle.lifecycle-common 之上提供任何额外功能,因此对其的依赖可以替换为 lifecycle.lifecycle-common
  • 来自 lifecycle-viewmodel-ktx 的非协程 API 已移至 lifecycle-viewmodel 模块。
  • lifecycle-process 现在使用 androidx.startup 初始化 ProcessLifecycleOwner

    以前,这是通过 androidx.lifecycle.ProcessLifecycleOwnerInitializer 完成的。

    如果您过去使用 tools:node="remove" 移除用于初始化进程生命周期的 ContentProvider,那么您现在需要执行以下操作。

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

    (或者)

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

版本 2.4.0-rc01

2021 年 9 月 29 日

androidx.lifecycle:lifecycle-*:2.4.0-rc01 已发布,与 Lifecycle 2.4.0-beta01 没有变化。版本 2.4.0-rc01 包含以下提交。

版本 2.4.0-beta01

2021 年 9 月 15 日

androidx.lifecycle:lifecycle-*:2.4.0-beta01 已发布。版本 2.4.0-beta01 包含以下提交。

API 更改

  • @OnLifecycleEvent 已弃用。应改用 LifecycleEventObserverDefaultLifecycleObserver。(I5a8fa
  • DefaultLifecycleObserver 已从 androidx.lifecycle.lifecycle-common-java8 移至 androidx.lifecycle.lifecycle-commonandroidx.lifecycle.lifecycle-common-java8 不再在 androidx.lifecycle.lifecycle-common 之上提供任何额外功能,因此对其的依赖可以替换为 androidx.lifecycle.lifecycle-common。(I021aa
  • 来自 lifecycle-viewmodel-ktx 的非协程 API 已移至 lifecycle-viewmodel 模块。(I6d5b2

外部贡献

  • 感谢 dmitrilc 修复了 ViewModel 文档中的一个类型错误!(#221

版本 2.4.0-alpha03

2021 年 8 月 4 日

androidx.lifecycle:lifecycle-*:2.4.0-alpha03 已发布。版本 2.4.0-alpha03 包含以下提交。

API 更改

  • 源破坏性更改:ViewModelProvider 已使用 Kotlin 重写。ViewModelProvider.Factory.create 方法不再允许可空泛型。(I9b9f6

行为变更

  • Lifecycle.repeatOnLifecycle:当重复执行时,block 现在总是串行调用。(Ibab33

外部贡献

  • 感谢 chao2zhang 修复了 repeatOnLifecycle 文档中的代码片段。#205

版本 2.4.0-alpha02

2021 年 6 月 16 日

androidx.lifecycle:lifecycle-*:2.4.0-alpha02 已发布。版本 2.4.0-alpha02 包含以下提交。

新功能

  • lifecycle-runtime-ktx 中添加了一个新的 RepeatOnLifecycleWrongUsage Lint 检查,用于检测 repeateOnLifecycleonStart()onResume() 中使用不正确的情况。(706078b/187887400

API 更改

  • LifecycleOwner.addRepeatingJob API 已移除,取而代之的是 Lifecycle.repeatOnLifecycle,它遵循结构化并发且更易于理解。(I4a3a8
  • ProcessLifecycleInitializer 设为 public,以便其他 androidx.startup.Initializer 可以将其用作依赖项。(I94c31

错误修复

  • 修复了当字段具有修饰符时 NullSafeMutableLiveData lint 检查的问题。(#147b/183696616
  • 修复了当使用泛型时 NullSafeMutableLiveData lint 检查的另一个问题。(#161b/184830263

外部贡献

版本 2.4.0-alpha01

2021 年 3 月 24 日

androidx.lifecycle:lifecycle-*:2.4.0-alpha01 已发布。版本 2.4.0-alpha01 包含以下提交。

行为变更

  • lifecycle-process 现在使用 androidx.startup 初始化 ProcessLifecycleOwner

    以前,这是通过 androidx.lifecycle.ProcessLifecycleOwnerInitializer 完成的。

    如果您过去使用 tools:node="remove" 移除用于初始化进程生命周期的 ContentProvider,那么您现在需要执行以下操作。

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

    (或者)

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

API 更改

  • 添加了 Flow.flowWithLifecycle API,该 API 使用 Lifecycle.repeatOnLifecycle API 在生命周期至少处于某个特定状态时从上游 Flow 发出值。这是新的 LifecycleOwner.addRepeatinJob API 的替代方案。(I0f4cd

错误修复

  • 来自 Lifecycle 2.3.1NonNullableMutableLiveData lint 规则现在可以正确区分具有不同可空性的字段变量。(b/169249668

Lifecycle Viewmodel Compose 版本 1.0.0

版本 1.0.0-alpha07

2021 年 6 月 16 日

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07 已发布。版本 1.0.0-alpha07 包含以下提交。

破坏性 API 更改

  • viewModel() 现在接受一个可选的 ViewModelStoreOwner,使其更容易与 LocalViewModelStoreOwner 以外的所有者一起使用。例如,您现在可以使用 viewModel(navBackStackEntry) 来检索与特定导航图关联的 ViewModel。(I2628db/188693123

版本 1.0.0-alpha06

2021 年 6 月 2 日

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06 已发布。版本 1.0.0-alpha06 包含以下提交。

已更新以兼容 Compose 版本 1.0.0-beta08

版本 1.0.0-alpha05

2021 年 5 月 18 日

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05 已发布。版本 1.0.0-alpha05 包含以下提交。

新功能

  • 已更新以兼容 Compose 版本 1.0.0-beta07

错误修复

  • ui-test-manifest 和 ui-tooling-data 的 AndroidManifest 文件现在与 Android 12 兼容(I6f9deb/184718994

版本 1.0.0-alpha04

2021 年 4 月 7 日

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04 已发布。版本 1.0.0-alpha04 包含以下提交。

依赖项变更

  • 此版本允许 androidx.hilt:hilt-navigation-composeandroidx.navigation:navigation-compose 同步对 androidx.compose.compiler:compiler:1.0.0-beta04androidx.compose.runtime:runtime:1.0.0-beta04 的依赖项。对于 1.0.0 版本,要求编译器和运行时匹配。

版本 1.0.0-alpha03

2021 年 3 月 10 日

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha03 已发布。版本 1.0.0-alpha03 包含以下提交。

API 更改

  • LocalViewModelStoreOwner.current 现在返回一个可空的 ViewModelStoreOwner,以便更好地确定当前组合中是否存在 ViewModelStoreOwner。需要 ViewModelStoreOwner 的 API(例如 viewModel()NavHost)如果未设置 ViewModelStoreOwner,仍会抛出异常。(Idf39a

Lifecycle-Viewmodel-Compose 版本 1.0.0-alpha02

2021 年 2 月 24 日

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02 已发布。版本 1.0.0-alpha02 包含以下提交。

API 更改

  • LocalViewModelStoreOwner 现在具有可与 CompositionLocalProvider 一起使用的 provides 函数,取代了 asProvidableCompositionLocal() API。(I45d24

Lifecycle-Viewmodel-Compose 版本 1.0.0-alpha01

2021 年 2 月 10 日

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01 已发布。版本 1.0.0-alpha01 包含以下提交。

新功能

  • viewModel() 可组合函数和 LocalViewModelStoreOwner 已从 androidx.compose.ui.viewinterop 移至此工件的 androidx.lifecycle.viewmodel.compose 包中。(I7a374

版本 2.3.1

Lifecycle 版本 2.3.1

2021 年 3 月 24 日

androidx.lifecycle:lifecycle-*:2.3.1 已发布。版本 2.3.1 包含以下提交。

错误修复

  • NonNullableMutableLiveData lint 规则现在可以正确区分具有不同可空性的字段变量。(b/169249668

版本 2.3.0

版本 2.3.0

2021 年 2 月 10 日

androidx.lifecycle:lifecycle-*:2.3.0 已发布。版本 2.3.0 包含以下提交。

自 2.2.0 以来发生的主要变化

  • SavedStateHandle 对非 Parcelable 类的支持SavedStateHandle 现在支持延迟序列化,允许您为给定键调用 setSavedStateProvider(),提供一个 SavedStateProvider,当 SavedStateHandle 要求保存其状态时,它将获得 saveState() 的回调。请参阅保存非 Parcelable 类
  • 生命周期行为强制执行:
    • LifecycleRegistry 现在强制将 DESTROYED 作为终端状态。
    • LifecycleRegistry 现在验证其方法是否在主线程上调用。对于活动、片段等的生命周期,这始终是一个要求。从非主线程添加观察者会导致运行时难以捕获的崩溃。对于您自己组件拥有的 LifecycleRegistry 对象,您可以通过使用 LifecycleRegistry.createUnsafe(...) 显式选择退出检查,但随后您必须确保在从不同线程访问此 LifecycleRegistry 时存在适当的同步。
  • 生命周期状态和事件助手:添加了 Lifecycle.Event 的静态辅助方法 downFrom(State)downTo(State)upFrom(State)upTo(State),用于根据 State 和转换方向生成 Event。添加了 getTargetState() 方法,该方法提供 Event 之后生命周期将直接转换到的 State
  • withStateAtLeast:添加了 Lifecycle.withStateAtLeast API,该 API 会等待生命周期状态并在状态更改时同步运行非挂起代码块,然后以结果恢复。这些 API 与现有的 when* 方法不同,因为它们不允许运行挂起代码,并且不使用自定义调度程序。(aosp/1326081
  • ViewTree API:新的 ViewTreeLifecycleOwner.get(View)ViewTreeViewModelStoreOwner.get(View) API 允许您在给定 View 实例的情况下分别检索包含的 LifecycleOwnerViewModelStoreOwner。您必须升级到 Activity 1.2.0Fragment 1.3.0,以及 AppCompat 1.3.0-alpha01 或更高版本才能正确填充此内容。findViewTreeLifecycleOwnerfindViewTreeViewModelStoreOwner Kotlin 扩展分别在 lifecycle-runtime-ktxlifecycle-viewmodel-ktx 中可用。
  • LiveData.observe() Kotlin 扩展弃用:使用 lambda 语法所必需的 LiveData.observe() Kotlin 扩展现已弃用,因为在使用 Kotlin 1.4 时不再需要它。

版本 2.3.0-rc01

2020 年 12 月 16 日

androidx.lifecycle:lifecycle-*:2.3.0-rc01 已发布。版本 2.3.0-rc01 包含以下提交。

错误修复

  • SavedStateHandlekeys() 方法在状态保存前后现在保持一致 - 它现在包含以前与 setSavedStateProvider() 一起使用的键,以及与 set()getLiveData() 一起使用的键。(aosp/1517919b/174713653

外部贡献

版本 2.3.0-beta01

2020 年 10 月 1 日

androidx.lifecycle:lifecycle-*:2.3.0-beta01 已发布。版本 2.3.0-beta01 包含以下提交。

API 更改

  • 使用 lambda 语法所必需的 LiveData.observe() Kotlin 扩展现已弃用,因为在使用 Kotlin 1.4 时不再需要它。(I40d3f

错误修复

文档更改

  • liveData 构建器和 asLiveData() 文档已更新,以包含有关更改给定超时值的详细信息。(aosp/1122324

版本 2.3.0-alpha07

2020 年 8 月 19 日

androidx.lifecycle:lifecycle-*:2.3.0-alpha07 已发布。版本 2.3.0-alpha07 包含以下提交。

错误修复

  • 修复了 NullSafeMutableLiveData Lint 检查中的崩溃问题。(aosp/1395367

版本 2.3.0-alpha06

2020 年 7 月 22 日

androidx.lifecycle:lifecycle-*:2.3.0-alpha06 已发布。版本 2.3.0-alpha06 包含以下提交。

新功能

  • 添加了 Lifecycle.Event 的静态辅助方法 downFrom(State)downTo(State)upFrom(State)upTo(State),用于根据 State 和转换方向生成 Event。添加了 getTargetState() 方法,该方法提供 Event 之后生命周期将直接转换到的 State。(I00887
  • 添加了 Lifecycle.withStateAtLeast API,该 API 会等待生命周期状态并在状态更改时同步运行非挂起代码块,然后以结果恢复。这些 API 与现有的 when* 方法不同,因为它们不允许运行挂起代码,并且不使用自定义调度程序。(aosp/1326081

行为变更

  • LifecycleRegistry 现在强制将 DESTROYED 作为终端状态。(I00887
  • LifecycleRegistry 现在验证其方法是否在主线程上调用。对于活动、片段等的生命周期,这始终是一个要求。从非主线程添加观察者会导致运行时难以捕获的崩溃。对于您自己组件拥有的 LifecycleRegistry 对象,您可以通过使用 LifecycleRegistry.createUnsafe(...) 显式选择退出检查,但随后您必须确保在从不同线程访问此 LifecycleRegistry 时存在适当的同步。(Ie7280b/137392809

错误修复

  • 修复了 NullSafeMutableLiveData 中的崩溃问题。(b/159987480
  • 修复了 lifecycle-livedata-core-ktx 捆绑的 Lint 检查(特别是 NullSafeMutableLiveData)的 ObsoleteLintCustomCheck 问题。(b/158699265

版本 2.3.0-alpha05

2020 年 6 月 24 日

androidx.lifecycle:lifecycle-*:2.3.0-alpha05 已发布。版本 2.3.0-alpha05 包含以下提交。

错误修复

  • LiveData 现在更好地处理重入情况,避免对 onActive()onInactive() 进行重复调用。(b/157840298
  • 修复了当使用 Android Studio 4.1 Canary 6 或更高版本时 Lint 检查不运行的问题。(aosp/1331903

版本 2.3.0-alpha04

2020 年 6 月 10 日

androidx.lifecycle:lifecycle-*:2.3.0-alpha04 已发布。版本 2.3.0-alpha04 包含以下提交。

错误修复

  • 修复了 NonNullableMutableLiveData Lint 检查中的崩溃问题。(b/157294666
  • NonNullableMutableLiveData Lint 检查现在覆盖了更多情况,即带有非空类型参数的 MutableLiveData 被设置了 null 值。(b/156002218

版本 2.3.0-alpha03

2020 年 5 月 20 日

androidx.lifecycle:lifecycle-*:2.3.0-alpha03 已发布。版本 2.3.0-alpha03 包含以下提交。

新功能

  • SavedStateHandle 现在支持延迟序列化,允许您为给定键调用 setSavedStateProvider(),提供一个 SavedStateProvider,当 SavedStateHandle 要求保存其状态时,它将获得 saveState() 的回调。(b/155106862
  • 一个新的 ViewTreeViewModelStoreOwner.get(View) API 允许您在给定 View 实例的情况下检索包含的 ViewModelStoreOwner。您必须升级到 Activity 1.2.0-alpha05Fragment 1.3.0-alpha05AppCompat 1.3.0-alpha01 才能正确填充此内容。findViewModelStoreOwner() Kotlin 扩展已添加到 lifecycle-viewmodel-ktx。(aosp/1295522

错误修复

  • 修复了一个问题,该问题导致 Lifecycle 2.3.0-alpha01 中发布的 MutableLiveData Lint 检查未随 lifecycle-livedata-core-ktx 工件一起发布。(b/155323109

版本 2.3.0-alpha02

2020 年 4 月 29 日

androidx.lifecycle:lifecycle-*:2.3.0-alpha02 已发布。版本 2.3.0-alpha02 包含以下提交。

API 更改

  • SavedStateViewModelFactory 现在允许您向其构造函数传递一个 null Application,以更好地支持一个应用程序不易获取且不需要 AndroidViewModel 支持的情况。(aosp/1285740

错误修复

  • 通过避免在 API 28 及更低版本的设备上出现类验证失败,提高了冷启动性能。(aosp/1282118

版本 2.3.0-alpha01

2020 年 3 月 4 日

androidx.lifecycle:lifecycle-*:2.3.0-alpha01 已发布。版本 2.3.0-alpha01 包含以下提交。

新功能

  • 新的 ViewTreeLifecycleOwner.get(View) API 允许您在给定 View 实例的情况下检索包含的 LifecycleOwner。您必须升级到 Activity 1.2.0-alpha01Fragment 1.3.0-alpha01 才能正确填充此内容。findViewTreeLifecycleOwner Kotlin 扩展在 lifecycle-runtime-ktx 中可用。(aosp/1182361aosp/1182956
  • 添加了一个新的 Lint 检查,当在 Kotlin 中定义为非空的 MutableLiveData 上设置 null 值时,会发出警告。在使用 livedata-core-ktxlivedata-ktx 工件时,此功能可用。(aosp/1154723aosp/1159092
  • 一个新的 lifecycle-runtime-testing 工件可用,它提供一个实现 LifecycleOwner 并提供线程安全可变 LifecycleTestLifecycleOwner。(aosp/1242438

Bug 修复

  • lifecycle-runtime 工件现在具有唯一的包名。(aosp/1187196

版本 2.2.0

ViewModel-Savedstate 版本 2.2.0

2020 年 2 月 5 日

androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0 已发布。版本 2.2.0 包含以下提交

Lifecycle ViewModel SavedState 现在与其他 Lifecycle 工件共享相同的版本。2.2.0 的行为与 1.0.0 的行为相同。

版本 2.2.0

2020 年 1 月 22 日

androidx.lifecycle:lifecycle-*:2.2.0 已发布。版本 2.2.0 包含这些提交

自 2.1.0 以来的重要变更

  • Lifecycle 协程集成:新的 lifecycle-runtime-ktx 工件增加了 Lifecycle 与 Kotlin 协程之间的集成。lifecycle-livedata-ktx 也已扩展,以利用协程。有关更多详细信息,请参阅将 Kotlin 协程与架构组件配合使用
  • ViewModelProviders.of() 弃用ViewModelProviders.of() 已被弃用。在使用 Fragment 1.2.0 时,您可以将 FragmentFragmentActivity 传递给新的 ViewModelProvider(ViewModelStoreOwner) 构造函数以实现相同的功能。
  • lifecycle-extensions 工件弃用:随着上述 ViewModelProviders.of() 的弃用,此版本标志着 lifecycle-extensions 中最后一个 API 的弃用,此工件现在应被视为已完全弃用。我们强烈建议您依赖于所需的特定 Lifecycle 工件(例如,如果您使用 LifecycleService 则依赖 lifecycle-service,如果您使用 ProcessLifecycleOwner 则依赖 lifecycle-process),而不是 lifecycle-extensions,因为 lifecycle-extensions 将不会有未来的 2.3.0 版本。
  • Gradle 增量注解处理器:Lifecycle 的注解处理器默认是增量的。如果您的应用是用 Java 8 编程语言编写的,您可以使用 DefautLifecycleObserver;如果它用 Java 7 编程语言编写的,您可以使用 LifecycleEventObserver

版本 2.2.0-rc03

2019 年 12 月 4 日

androidx.lifecycle:lifecycle-*:2.2.0-rc03 已发布。版本 2.2.0-rc03 包含这些提交

Bug 修复

  • 修复了当模拟的 ViewModel 存储在 ViewModelStore 中并随后使用默认工厂查询时发生的故障。
  • 修复了 launchWhenCreated 和类似方法中 Dispatchers.Main.immediate 的用法,使其在相应的生命周期事件期间同步调用。(aosp/1156203

外部贡献

  • 感谢 Anders Järleberg 贡献此修复!(aosp/1156203
  • 感谢来自 Jetbrains 的 Vsevolod Tolstopyatov 评审内联执行的实现。

依赖项变更

  • Lifecycle Extensions 现在依赖于 Fragment 1.2.0-rc03

版本 2.2.0-rc02

2019 年 11 月 7 日

androidx.lifecycle:lifecycle-*:2.2.0-rc02 已发布。版本 2.2.0-rc02 包含这些提交

Bug 修复

  • 修复了库的 proguard 设置中的一个错误,该错误会影响运行 API 28+ 的设备(如果目标 API 低于 29)。(b/142778206)

版本 2.2.0-rc01

2019 年 10 月 23 日

androidx.lifecycle:lifecycle-*:2.2.0-rc01 已发布。版本 2.2.0-rc01 包含这些提交

Bug 修复

  • 修复了一个问题,即 launchWhenCreated 和相关方法由于使用了 Dispatchers.Main 而不是 Dispatchers.Main.immediate,导致比关联的生命周期方法晚一帧运行。(aosp/1145596

外部贡献

  • 感谢 Nicklas Ansman 贡献此修复!(aosp/1145596

版本 2.2.0-beta01

2019 年 10 月 9 日

androidx.lifecycle:lifecycle-*:2.2.0-beta01 已发布。版本 2.2.0-beta01 包含这些提交

Bug 修复

  • 修复了 Lifecycle 2.2.0-alpha05 中引入的回归问题,该问题导致在 Android 10 设备上 ProcessLifecycleOwner 和 activity 的 LifecycleOwner 转换为 Started 和 Resumed 的顺序出现问题。(aosp/1128132
  • 修复了 Lifecycle 2.2.0-alpha05 中引入的回归问题,该问题在使用 lifecycle-process2.0.02.1.0 版本时会导致 NullPointerException。(b/141536990

版本 2.2.0-alpha05

2019 年 9 月 18 日

androidx.lifecycle:lifecycle-*:2.2.0-alpha05 已发布。版本 2.2.0-alpha05 包含这些提交

Bug 修复

  • 修复了协程 liveData 构建器中的竞争条件。b/140249349

版本 2.2.0-alpha04

2019 年 9 月 5 日

androidx.lifecycle:lifecycle-*:2.2.0-alpha04 已发布。此版本中包含的提交可以在此处找到。

新功能

  • lifecycleScopewhenCreatedwhenStartedwhenResumedviewModelScope 以及 liveData 的底层实现现在使用 Dispatchers.Main.immediate 而不是 Dispatchers.Main。(b/139740492

外部贡献

  • 感谢 Nicklas Ansman 贡献了 Dispatchers.Main.immediate 的更改!(aosp/1106073

版本 2.2.0-alpha03

2019 年 8 月 7 日

androidx.lifecycle:lifecycle-*:2.2.0-alpha03 已发布。此版本中包含的提交可以在此处找到。

新功能

API 变更

  • ViewModelProviders.of() 已被弃用。您可以将 FragmentFragmentActivity 传递给新的 ViewModelProvider(ViewModelStoreOwner) 构造函数以实现相同的功能。(aosp/1009889

版本 2.2.0-alpha02

2019 年 7 月 2 日

androidx.lifecycle:*:2.2.0-alpha02 已发布。此版本中包含的提交可以在此处找到。

API 变更

  • LiveDataScope.initialValue 替换为 LiveDataScope.latestValue,后者将跟踪 liveData 块当前发出的值。
  • liveData 构建器添加了一个新的重载,该重载接收类型为 Durationtimeout 参数

版本 2.2.0-alpha01

2019 年 5 月 7 日

androidx.lifecycle:*:2.2.0-alpha01 已发布。此版本中包含的提交可以在此处找到。

新功能

  • 此版本添加了新功能,支持 Lifecycle 和 LiveData 的 Kotlin 协程。有关它们的详细文档可以在此处找到。

ViewModel-SavedState 版本 1.0.0

版本 1.0.0

2020 年 1 月 22 日

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0 已发布。版本 1.0.0 包含这些提交

1.0.0 中的重要功能

  • 新增了 SavedStateHandle 类。它使您的 ViewModel 类能够访问和贡献保存的状态。此对象可以在 ViewModel 类的构造函数中接收,并且 Fragments 和 AppCompatActivity 默认提供的工厂会自动注入 SavedStateHandle
  • 新增了 AbstractSavedStateViewModelFactory。它允许您为 ViewModel 创建自定义工厂,并使其能够访问 SavedStateHandle

ViewModel-Savedstate 版本 1.0.0-rc03

2019 年 12 月 4 日

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03 已发布。版本 1.0.0-rc03 包含这些提交

依赖项变更

  • Lifecycle ViewModel SavedState 现在依赖于 Lifecycle 2.2.0-rc03

Viewmodel-Savedstate 版本 1.0.0-rc02

2019 年 11 月 7 日

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc02 已发布。版本 1.0.0-rc02 包含这些提交

依赖项变更

  • 现在依赖于 lifecycle 2.2.0-rc02

ViewModel-SavedState 版本 1.0.0-rc01

2019 年 10 月 23 日

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01 已发布,与 1.0.0-beta01 相比没有变化。版本 1.0.0-rc01 包含这些提交

ViewModel-Savedstate 版本 1.0.0-beta01

2019 年 10 月 9 日

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01 已发布。版本 1.0.0-beta01 包含这些提交

Bug 修复

  • 修复了一个问题,即首次在 Activity.onActivityResult() 中访问 SavedState ViewModel 会导致 IllegalStateException。(b/139093676
  • 修复了使用 AbstractSavedStateViewModelFactory 时的 IllegalStateException。(b/141225984

ViewModel-SavedState 版本 1.0.0-alpha05

2019 年 9 月 18 日

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha05 已发布。版本 1.0.0-alpha05 包含这些提交

API 变更

  • SavedStateViewModelFactory 不再继承 AbstractSavedStateViewModelFactory,并且 SavedStateHandle 仅为请求它的 ViewModel 创建 (aosp/1113593)

ViewModel-SavedState 版本 1.0.0-alpha03

2019 年 8 月 7 日

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03 已发布。此版本中包含的提交可以在此处找到。

重大变更

ViewModel-SavedState 版本 1.0.0-alpha02

2019 年 7 月 2 日

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha02 已发布。此版本中包含的提交可以在此处找到。

新功能

  • 添加了接受默认值的 SavedStateHandle.getLiveData() 重载。

API 更改

  • SavedStateVMFactory 已重命名为 SavedStateViewModelFactory
  • AbstractSavedStateVMFactory 已重命名为 AbstractSavedStateViewModelFactory

ViewModel-Savedstate 版本 1.0.0-alpha01

2019 年 3 月 13 日

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01 已发布。此初始版本的完整提交日志可以在此处找到。

新功能

  • 现在 ViewModels 可以贡献保存的状态。为此,您可以使用新引入的 viewmodel 工厂 SavedStateVMFactory,并且您的 ViewModel 应该有一个接收 SavedStateHandle 对象作为参数的构造函数。

版本 2.1.0

自 2.0.0 以来的重要变更

  • 添加了 LifecycleEventObserver,用于需要生命周期事件流的情况。它是一个公共 API,而不是一个隐藏的 GenericLifecycleObserver 类。
  • LiveData.observe 方法和 Transformations.* 方法添加了 ktx 扩展。
  • 添加了 Transformations.distinctUntilChanged,它会创建一个新的 LiveData 对象,该对象在源 LiveData 值发生更改之前不会发出值。
  • 通过添加扩展属性 ViewModel.viewModelScope,在 ViewModels 中添加了协程支持。

版本 2.1.0

2019 年 9 月 5 日

androidx.lifecycle:lifecycle-*:2.1.0 已发布。此版本中包含的提交可以在此处找到。

版本 2.1.0-rc01

2019 年 7 月 2 日

androidx.lifecycle:*:2.1.0-rc01 已发布,与 androidx.lifecycle:*:2.1.0-beta01 相比没有变化。此版本中包含的提交可以在此处找到。

版本 2.1.0-beta01

2019 年 5 月 7 日

androidx.lifecycle:*:2.1.0-beta01 已发布。此版本中包含的提交可以在此处找到。

新功能

  • Lifecycles 已升级到 Beta 版:先前 Alpha 版中引入的 API,例如用于转换和观察的 liveData 扩展函数、通过属性委托初始化的 ViewModel 等已稳定,并且不会再更改。

版本 2.1.0-alpha04

2019 年 4 月 3 日

androidx.lifecycle:*:2.1.0-alpha04 已发布。此版本中包含的提交可以在此处找到。

API 变更

  • 重大变更:by viewModels()by activityViewModels() 背后的底层 API 已更改为直接支持 ViewModelStore,而不仅仅是 ViewModelStoreOwner。(aosp/932932

版本 2.1.0-alpha03

2019 年 3 月 13 日

androidx.lifecycle:*:2.1.0-alpha03 已发布。此版本中包含的完整提交列表可以在此处找到。

API 变更

  • ViewModelProvider.KeyedFactory 已被移除。除了 ViewModelProvider.Factory 之外的第二个接口与 Kotlin 中 by viewmodels {} 等属性委托等新功能配合不佳。(aosp/914133

版本 2.1.0-alpha02

2019 年 1 月 30 日

androidx.lifecycle 2.1.0-alpha02 已发布。

API 变更

  • LifecycleRegistry 现在包含一个 setCurrentState() 方法,它取代了现在已弃用的 setState() 方法。(aosp/880715

Bug 修复

  • 修复了一个问题,即当包含的 ViewModelStore 被清除时,模拟的 ViewModel 实例会崩溃。b/122273087

版本 2.1.0-alpha01

2018 年 12 月 17 日

androidx.lifecycle 2.1.0-alpha01 已发布。

新功能

  • 添加了 LifecycleEventObserver,用于需要生命周期事件流的情况。它是一个公共 API,而不是一个隐藏的 GenericLifecycleObserver 类。
  • LiveData.observe 方法和 Transformations.* 方法添加了 ktx 扩展。
  • 添加了 Transformations.distinctUntilChanged 方法。它会创建一个新的 LiveData 对象,该对象在源 LiveData 值发生更改之前不会发出值。
  • ViewModels 中的协程支持:添加了扩展属性 ViewModel.viewModelScope
  • 添加了 ViewModelProvider.KeyedFactory,这是一个 ViewModel 工厂,其 create 方法接收 keyClass

版本 2.0.0

版本 2.0.0

2018 年 9 月 21 日

Lifecycle 2.0.0 已发布,包含 ViewModel 中 2.0.0-rc01 的一个错误修复。

错误修复

  • 修复了一个 ViewModel proguard 规则,该规则错误地移除了构造函数 b/112230489

版本 2.0.0-beta01

2018 年 7 月 2 日

错误修复

  • 修复了 LifecycleObserver proguard 规则,只保留实现,不保留子接口 b/71389427
  • 修复了 ViewModel proguard 规则以允许混淆和压缩

AndroidX 之前的版本

对于以下 AndroidX 之前的 Lifecycle 版本,请包含这些依赖项

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

2018 年 3 月 21 日

只有一个小改动:android.arch.core.util.Function 已从 arch:runtime 移至 arch:common。这允许在没有运行时依赖项的情况下使用它,例如在下面的 paging:common 中。

lifecycle:commonlifecycle:runtime 的依赖项,因此此更改不会直接影响 lifecycle:runtime,而只会影响直接依赖于 lifecycle:common 的模块,就像 Paging 所做的那样。

版本 1.1.0

2018 年 1 月 22 日

打包变更

现在提供了新的、更小的依赖项

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

API 更改

  • 已弃用的 LifecycleActivityLifecycleFragment 现在已被移除 - 请使用 FragmentActivityAppCompatActivity 或支持 Fragment
  • @NonNull 注解已添加到 ViewModelProvidersViewModelStores
  • ViewModelProviders 构造函数已被弃用 - 请直接使用其静态方法
  • ViewModelProviders.DefaultFactory 已被弃用 - 请使用 ViewModelProvider.AndroidViewModelFactory
  • 已添加静态方法 ViewModelProvider.AndroidViewModelFactory.getInstance(Application),用于检索适合创建 ViewModelAndroidViewModel 实例的静态 Factory