生命周期

生命周期感知型组件可执行操作来响应另一个组件(如 activity 和 fragment)的生命周期状态的变化。这些组件有助于您写出更有条理且往往更精简的代码,这样的代码更易于维护。

下表列出了 androidx.lifecycle 组中的所有工件。

制品 稳定版 候选版 Beta 版 Alpha 版
lifecycle-* 2.8.7 - - 2.9.0-alpha07
lifecycle-viewmodel-compose 2.8.7 - - 2.9.0-alpha07
此库的最后更新时间:2024 年 11 月 13 日

声明依赖项

如需为 Lifecycle 添加依赖项,您必须将 Google Maven 制品库添加到项目中。如需了解详情,请参阅 Google 的 Maven 制品库

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

Kotlin

Groovy

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

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

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

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

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

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

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

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

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

Kotlin

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

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

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

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

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

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

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

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

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

Java

Groovy

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

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

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

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

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

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

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

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

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

Kotlin

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

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

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

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

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

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

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

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

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

如需详细了解依赖项,请参阅添加 build 依赖项

反馈

您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对此库有任何改进建议,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。

创建新问题

如需了解详情,请参阅问题跟踪器文档

版本 2.9

版本 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。(Ib6394b/334076622

KotlinX 序列化支持

  • SavedState 1.3.0-alpha05 中添加了 KotlinX 序列化支持后,我们引入了 saved(一种延迟属性委托),以便轻松地将 @Serializable 类存储在 SavedStateHandle 中,并在进程终止和重新创建时自动恢复这些类。请注意,saved 委托是延迟执行的,在被访问之前不会调用 init lambda 或将任何内容保存到 SavedStateHandle。(I47a88b/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 搭配使用。如果您尝试同时使用这两者来访问同一状态,系统会抛出异常。(I04a4fb/375408415

版本 2.9.0-alpha06

2024 年 10 月 30 日

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

行为变更

  • Lifecycle.DESTROYED 状态是终端状态,现在,如果尝试将 Lifecycle 从该状态移至任何其他状态,都会导致 IllegalStateException。(I116c4b/370577987
  • SavedStateHandle 不再包含返回的 Bundle 为空的任何 SavedStateProvider.saveState()。(I910b5b/370577987

bug 修复

  • 现在,当 LifecycleDESTROYED 时,Lifecycle.eventFlow 会正确完成(I293b2b/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 做好准备。(I503edI48764b/334076622

版本 2.9.0-alpha03

2024 年 9 月 18 日

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

bug 修复

依赖项更新

版本 2.9.0-alpha02

2024 年 9 月 4 日

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

bug 修复

  • 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` 扩展代理现在支持可为 null 的值。感谢 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 Multiplatform 目标的支持(I139d3b/338268719

新功能

  • 提供了一个新的 androidx.lifecycle:lifecycle-viewmodel-testing KMP 工件,该工件提供了一个 ViewModelScenario 类,用于单独测试 ViewModel,并支持 onCleared(所有平台)和 SavedStateHandle(仅限 Android)。(337f68dc9b34099799a95cb/264602919
  • 现在,使用 ViewModelProvider 创建 ViewModel 是线程安全的;@MainThread 注解已被移除。(Ifd978b/237006831

API 变更

  • 添加了 CreationExtras.Key() 工厂函数,以简化匿名 CreationExtras.Key 对象的创建。(I970ee)
  • CreationExtras 现在包含类似于映射的运算符重载,以便在 Kotlin 中以惯用方式处理内容。它允许将 in+=+CreationExtras 搭配使用。(Ib4353)
  • CreationExtras 现在会实现 equalshashCodetoString 方法。(Ib4353)
  • NewInstanceFactory 现已在 JVM 桌面版和 Android 目标平台上推出。(d3d0892)
  • 内嵌扩展属性,用于在 Kotlin 语言版本 2.0 中安全地公开底层应用 (I39df2)

bug 修复

  • 移除了手动说明对新平台 API 的访问权限,因为当将 R8 与 AGP 7.3 或更高版本(例如 R8 版本 3.3)搭配使用时,系统会通过 API 建模自动执行此操作;当使用 AGP 8.1 或更高版本(例如 D8 版本 8.1)时,系统会针对所有 build 自动执行此操作。建议不使用 AGP 的客户更新到 D8 8.1 或更高版本。如需了解详情,请参阅这篇文章。(If6b4cb/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-compose:移除了 desktop 工件,并添加了 -jvmStubs-linuxx64Stubs 工件。这些目标均不应被使用,它们只是为了帮助 Jetbrains Compose 团队而创建的占位符。(6a3f5b3)

版本 2.8.6

2024 年 9 月 18 日

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

bug 修复

  • NullSafeMutableLiveData lint 错误对智能类型转换的支持得到了改进,避免了误报。(85fed6b/181042665

依赖项更新

版本 2.8.5

2024 年 9 月 4 日

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

bug 修复

  • 更新了 androidx.lifecycle.ReportFragment ProGuard 规则,允许混淆处理。(ff898e1)

外部贡献

  • SavedStateHandle.saveable 扩展程序代理现在支持可为 null 的值。感谢 Roman Kalukiewicz 提供这项贡献。(0d78ea6)

版本 2.8.4

2024 年 7 月 24 日

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

bug 修复

  • LiveData.asFlow() 现在可正确处理以下情况:返回的 Flow 在收到已在 LiveData 上设置的值后立即完成(例如,使用 take(1) 时)。(I9c566)
  • Lifecycle*Effect 完成现在是幂等的(即,如果由于生命周期停止而调用了 onStopOrDispose,则在处置时不会再次调用它,除非生命周期再次恢复为 STARTED)。(I5f607b/352364595

版本 2.8.3

2024 年 7 月 1 日

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

bug 修复

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

版本 2.8.2

2024 年 6 月 12 日

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

bug 修复

  • 修复了将 Lifecycle 2.8.X 与 Compose 1.6.X 或更低版本搭配使用时出现的 CompositionLocal LocalLifecycleOwner not present 错误 - 现在,您可以将 Lifecycle 2.8.2 与任何版本的 Compose 搭配使用,而无需任何权宜解决方法。(aosp/3105647b/336842920
  • 将先前版本的 compileOnly 生命周期依赖项与版本 2.8 及更高版本混合时,ViewModelProvider 不再崩溃,修复了 LeakCanary 等库存在的问题。(I80383b/341792251

版本 2.8.1

2024 年 5 月 29 日

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

bug 修复

  • lifecycle-viewmodel-compose 现在只依赖于 compose-runtime,移除了对 compose-ui 的常见依赖项。Android 工件会保留其 compose-ui 以实现兼容性。(aosp/3079334b/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 界面移至 lifecycle-runtime-compose,以便其基于 Compose 的辅助 API 可在 Compose 界面之外使用。
  • lifecycle-runtime-compose 工件现在包含 dropUnlessResumeddropUnlessStarted API,可让您丢弃点击或其他事件,即使 LifecycleOwner 已低于给定的 Lifecycle.State 也是如此。例如,您可以将此方法与 Navigation Compose 搭配使用,以避免在转换到其他屏幕已开始后处理点击事件:onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
  • ViewModel.viewModelScope 现在是一个可替换的构造函数参数,可让您注入自己的调度程序和 SupervisorJob(),或使用 runTest 中提供的 backgroundScope 替换默认值。(I2817cb/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 中的核心生命周期 API 现在在与 Kotlin Multiplatform 兼容的工件中提供。

受影响的工件:

  • 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 工件,以匹配 androidx.compose 的多平台支持。

ViewModel Kotlin Multiplatform 兼容性

lifecycle-viewmodel 工件和 ViewModelViewModelStoreViewModelStoreOwnerViewModelProvider 等 API 现在包含在与 Kotlin Multiplatform 兼容的工件中。

为了适应这项更改,ViewModelProvider 上接受 java.lang.Class<T> 的方法等方法现在都有接受 kotlin.reflect.KClass<T> 的等效方法。

Android 上的二进制兼容性得到了保留,但将 Android API Surface 与通用 API Surface 进行比较时,会发现一些值得注意的变化:

  • 现在,构建 ViewModelProvider 实例是通过 ViewModelProvider.create() 方法完成的,而不是直接调用其构造函数。
  • ViewModelProvider.NewInstanceFactoryViewModelProvider.AndroidViewModelFactory 仅适用于 Android 设备。
    • 建议自 ViewModelProvider.Factory 扩展自定义工厂,并使用接受 CreationExtrascreate 方法或使用 viewModelFactory Kotlin DSL。
  • 在非 JVM 平台上使用 ViewModelProvider 而没有自定义工厂将导致 UnsupportedOperationException。在 JVM 平台上,如果未提供自定义工厂,则通过使用无参数 ViewModel 构造函数来保持兼容性。
  • Dispatchers.Main 不可用的平台(例如 viewModelScopeEmptyCoroutineContextLinux)。

受影响的工件:

  • lifecycle-viewmodel 会将大多数 API 移至 common,并除了 Android 之外还支持 jvm 和 iOS。
  • lifecycle-viewmodel-ktx 现在为空,所有 API 都已移至 lifecycle-viewmodel
  • lifecycle-viewmodel-compose 会将所有 API 移至 common 并提供 Android 工件,以匹配 androidx.compose 的多平台支持。

行为变更

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

已知问题

版本 2.8.0-rc01

2024 年 5 月 1 日

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

bug 修复

  • 修复了 lifecycle-common 类的基准配置文件未正确打包的问题。这些现在打包在 lifecycle-runtime AAR 中。(aosp/3038274b/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 工件现在与 Kotlin Multiplatform 兼容,其代码已移至 common,并提供了 Android 工件,与 androidx.compose 的多平台支持相匹配。(If7a71I4f4a0b/331769623

版本 2.8.0-alpha04

2024 年 4 月 3 日

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

新功能

  • lifecycle-viewmodel-compose 工件现在与 Kotlin Multiplatform 兼容,其代码已移至 common,并提供了 Android 工件,与 androidx.compose 的多平台支持相匹配。为了适应这一变化,可组合项 viewModel 方法现在除了接受 java.lang.Class 外,还接受 KClass。(b/330323282)

bug 修复

依赖项更新

  • lifecycle-viewmodel-compose 工件现在依赖于 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 替换默认值。(I2817cb/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 工件和 ViewModelViewModelStoreViewModelStoreOwnerViewModelProvider 等 API 现在包含在与 Kotlin Multiplatform 兼容的工件中。(b/214568825)

为了适应这项更改,ViewModelProvider 上接受 java.lang.Class<T> 的方法等方法现在都有接受 kotlin.reflect.KClass<T> 的等效方法。

Android 上的二进制兼容性得到了保留,但将 Android API Surface 与通用 API Surface 进行比较时,会发现一些值得注意的变化:

  • 现在,构建 ViewModelProvider 实例是通过 ViewModelProvider.create() 方法完成的,而不是直接调用其构造函数。
  • ViewModelProvider.NewInstanceFactoryViewModelProvider.AndroidViewModelFactory 仅适用于 Android 设备。
    • 建议自 ViewModelProvider.Factory 扩展自定义工厂,并使用接受 CreationExtrascreate 方法或使用 viewModelFactory Kotlin DSL。
  • 在非 JVM 平台上使用 ViewModelProvider 而没有自定义工厂将导致 UnsupportedOperationException。在 JVM 平台上,如果未提供自定义工厂,则通过使用无参数 ViewModel 构造函数来保持兼容性。
  • Dispatchers.Main 不可用的平台(例如 viewModelScopeEmptyCoroutineContextLinux)。

行为变更

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

bug 修复

  • ViewModel.getCloseable 现在会处理重复的键:如果 key 已与 AutoCloseable 资源相关联,系统会立即替换并关闭旧资源。(Ibeb67)
  • 现在,访问 ViewModelviewModelScope 是线程安全的。(If4766b/322407038

外部贡献

  • LocalLifecycleOwner 已从 Compose 界面移至 lifecycle-runtime-compose,以便其基于 Compose 的辅助 API 可在 Compose 界面之外使用。感谢 Jake Wharton 的贡献。(I6c41bb/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) }Icba83b/317230685

Kotlin 转换

  • ViewModel 现已采用 Kotlin 编写(I16f26b/214568825
  • lifecycle-viewmodel-ktx Kotlin 扩展现在已移至基本生命周期模块。(Id787bb/274800183
  • lifecycle-runtime-ktx Kotlin 扩展现在已移至基本生命周期模块。(Ic3686b/274800183
  • lifecycle-livedata-core-ktx Kotlin 扩展现在已移至基本生命周期模块。(I54a3db/274800183

Kotlin Multiplatform 兼容性

  • LifecycleLifecycleOwnerLifecycleObserverLifecycle.StateLifecycle.EventLifecycleRegistry 中的核心生命周期 API 现在包含在与 Kotlin Multiplatform 兼容的工件中。(b/317249252)

API 变更

  • 现在,如果在没有密钥的情况下调用 LifecycleStartEffectLifecycleResumeEffect,就会出错,遵循与这些 API 镜像的 DisposableEffect API 相同的惯例。(Ib0e0cb/323518079
  • ViewModel 现在使用 AutoCloseable,而不再使用 Closeable。这是一个向后兼容的更改。(I27f8eb/214568825
  • 废弃了 LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData),取而代之的是 LiveData.toPublisher(lifecycleOwner)。(Iabe29b/262623005

外部贡献

  • 感谢 JetBrains 的 Ivan Matkov 帮助将 Lifecycle 迁移到 Kotlin Multiplatform。(aosp/2926690I0c5acIf445d

版本 2.8.0-alpha01

2024 年 1 月 24 日

发布了 androidx.lifecycle:lifecycle-*:2.8.0-alpha01版本 2.8.0-alpha01 中包含这些提交内容

新功能

  • ViewModel 现在支持使用允许通过 getCloseable() 检索 Closeable 对象的 key 添加 Closeable 对象。(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 提供的协程)中安全使用。
  • mapswitchMapLiveData 扩展现在会反映 distinctUntilChanged 的行为:如果 LiveData 设置了 value,系统会立即调用 map/switchMap 函数来填充返回的 LiveDatavalue。这可确保在第一次组合(与 observeAsState() 搭配使用时)中设置初始值,但不会更改观察行为 - 仅当您开始观察 LiveData 时,来自来源 LiveData 的更新值才会仍然适用。
  • 此版本修复了以下问题:SavedStateHandle 在进程终止和重新创建后无法正确恢复自定义 Parcelable 类。由于 Android 框架会丢失类型信息,因此自定义 Parcelable 的数组需要额外的工作(手动创建正确类型的类型化数组),并且 getgetLiveDatagetStateFlow 的文档现在明确指出了这一限制。
  • LifecycleObserver 关联的 Proguard 保留规则已移除。这意味着,如果 proguarded 代码希望通过反射使用 API(例如使用早已废弃的 @OnLifecycleEvent 注解),则需要为其特定用例提供自己的保留规则。

生命周期事件可观测性

  • 现在,您可以通过 Lifecycle.asFlow() 扩展方法观察 Lifecycle.EventFlow,而无需使用 LifecycleEventObserver
  • 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.currentStateFlow 属性观察当前的 Lifecycle.State,该属性会返回一个 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 中包含这些提交内容。

bug 修复

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

版本 2.7.0-rc01

2023 年 11 月 15 日

发布了 androidx.lifecycle:lifecycle-*:2.7.0-rc01版本 2.7.0-rc01 中包含这些提交内容

bug 修复

  • 现在,如果 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。(Icf728b/297880630

bug 修复

  • 修复了 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。(I329deb/259344129

API 变更

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

行为变更

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

bug 修复

  • Lifecycle 2.6.2 移植 - 修复了以下问题:如果恢复了状态,调用了 save() 但未实际在父 SavedStateRegistry 中保存状态,然后再次恢复了状态,则 SavedStateHandle 在进程终止后无法正确恢复。这修复了 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。(Ib212db/209684871
  • 现在,可以使用 Lifecycle.asFlow().Lifecycle.Event 作为 Flow 进行观察(If2c0fb/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

bug 修复

  • 如果前面的 LiveData 设置了值,则 LiveData.distinctUntilChanged() 扩展现在会设置返回的 LiveDatavalue。这不会改变观察行为 - 仅当您开始观察从 distinctUntilChanged() 返回的 LiveData 时,来自来源 LiveData 的更新值才会仍然适用。(Ib482f)
  • LifecycleObserver 关联的 Proguard 保留规则已移除。这意味着,如果希望通过反射使用 API 的 ProGuard 保护代码,则需要为其特定用例提供自己的保留规则。(Ia12fd)

版本 2.6

版本 2.6.2

2023 年 9 月 6 日

发布了 androidx.lifecycle:lifecycle-*:2.6.2版本 2.6.2 中包含这些提交内容

bug 修复

  • 修复了以下问题:如果在进程终止后恢复了状态,调用了 save() 但未实际在父 SavedStateRegistry 中保存状态,然后再次恢复了状态,则 SavedStateHandle 无法正确恢复。这修复了 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 设置了显式值,从而使得您能够区分返回 nullliveData.value,因为之前未曾设置过任何值或未曾有过显式 null 值。
  • 现在,MediatorLiveData 包含一个用于设置初始值的构造函数。
  • collectAsStateWithLifecycle()StateFlowFlow 上添加了一个新的扩展,该扩展从数据流中收集数据,并以可感知生命周期的方式将其最新值表示为 Compose 状态。
  • 废弃了 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 方法的可为 null 性现在与泛型类型的可为 null 性一致。如果您希望 Observer.onChanged() 接受可为 null 的类型,则必须使用可为 null 的类型实例化 Observer
  • 以下类也已转换为 Kotlin,但仍与源代码兼容:DefaultLifecycleObserverLifecycleEventObserverLifecycleLifecycleRegistryLifecycleObserverViewModelStoreAndroidViewModelAbstractSavedStateViewModelFactoryLifecycleServiceServiceLifecycleDispatcherProcessLifecycleOwner

版本 2.6.0-rc01

2023 年 2 月 22 日

发布了 androidx.lifecycle:lifecycle-*:2.6.0-rc01版本 2.6.0-rc01 中包含这些提交内容

bug 修复

  • 如果前面的 LiveData 设置了值,则 LiveData.distinctUntilChanged() 扩展现在会设置返回的 LiveDatavalue。这不会改变观察行为 - 仅当您开始观察从 distinctUntilChanged() 返回的 LiveData 时,来自来源 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
  • 提供 lifecycleScope 字段的 LifecycleOwner Kotlin 扩展已从 lifecycle-runtime-ktx 移至 lifecycle-common 工件。(I41d78b/240298691
  • 提供 coroutineScope 字段的 Lifecycle 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 代码必须使用之前仅在使用 lifecycle-livedata-ktx 时可用的 Kotlin 扩展方法语法。使用 Java 编程语言时,这些接受 androidx.arch.core.util.Function 方法的版本已废弃,取而代之的是接受 Kotlin Function1 的版本。此更改保持了二进制文件兼容性。(I8e14f)
  • ViewTreeViewModelStoreOwner 现在用 Kotlin 编写。对于用 Kotlin 编写的类,这项变更与源代码不兼容。现在,您必须直接在 androidx.lifecycle.setViewTreeViewModelStoreOwnerandroidx.lifecycle.findViewTreeViewModelStoreOwnerView 上导入并使用 Kotlin 扩展方法,才能设置和查找之前设置的所有者。对于使用 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 设置了显式值,从而使得您能够区分返回 nullliveData.value,因为之前未曾设置过任何值或未曾有过显式 null 值。(Ibd018)

API 变更

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

Kotlin 转换

  • ViewTreeLifecycleOwner 现在用 Kotlin 编写。对于用 Kotlin 编写的类,这项变更与源代码不兼容。现在,您必须直接在 androidx.lifecycle.setViewTreeLifecycleOwnerandroidx.lifecycle.findViewTreeLifecycleOwnerView 上导入并使用 Kotlin 扩展方法,才能设置和查找之前设置的所有者。这取代了 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

bug 修复

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

版本 2.6.0-alpha03

2022 年 10 月 24 日

发布了 androidx.lifecycle:lifecycle-*:2.6.0-alpha03版本 2.6.0-alpha03 中包含这些提交内容

bug 修复

  • 修复了不同生命周期模块之间的约束条件无法按预期运行的问题。(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

bug 修复

  • 现在,Lifecycle 工件包含相关约束条件,以确保所有相互依赖的 Lifecycle 工件使用同一版本,并且系统会在某个依赖项升级后自动升级其他依赖项。b/242871265
  • 现在,FlowLiveData.asFlow() 会创建 callbackFlow,而不是使用自己的 Channel 实现来确保线程安全和上下文保留性。(I4a8b2b/200596935
  • 现在,FlowLiveDataasLiveData 函数在创建新的 LiveData 对象时会保留 StateFlow 的初始值。(I3f530b/157380488
  • Lifecycle 2.5.1 起:现在,将有状态的构造函数与 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 中包含这些提交内容

新功能

  • collectAsStateWithLifecycleStateFlowFlow 上添加了一个新的扩展,该扩展从数据流中收集数据,并以可感知生命周期的方式将其最新值表示为 Compose 状态。当生命周期至少处于某个 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 中包含这些提交内容

bug 修复

  • 将有状态的 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,该 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 会自动提供这些 extra。

    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,该 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,这些 API 支持 rememberSaveable,例如由 ViewModel 的 SavedStateHandle 提供支持的行为。

    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 是否附有观察器,尝试将 Lifecycle.StateINITIALIZED 变为 DESTROYED 时始终会抛出 IllegalStateException
  • 现在,LifecycleRegistry 会在观察器达到 DESTROYED 状态时对其进行清除。

版本 2.5.0-rc02

2022 年 6 月 15 日

发布了 androidx.lifecycle:lifecycle-*:2.5.0-rc02版本 2.5.0-rc02 中包含这些提交内容。

bug 修复

  • 将先前版本的 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 中包含这些提交内容

bug 修复

  • 在被传递了 null 来源而不是将 null 来源传播到观察器时,MediatorLiveData.addSource() 现在会抛出 NullPointerException。(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

bug 修复

  • 修复了以下问题:在使用多个返回堆栈时,将非主要底部导航标签页中的一个 NavHost 嵌套在另一个 NavHost 内会导致 IllegalStateException。(I11bd5b/228865698

版本 2.5.0-alpha06

2022 年 4 月 6 日

发布了 androidx.lifecycle:lifecycle-*:2.5.0-alpha06版本 2.5.0-alpha06 中包含这些提交内容

新功能

  • SavedStateHandle.saveable 添加了实验性 MutableState 过载,以与 rememberSaveable 保持一致(I38cfeb/224565154

API 变更

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

bug 修复

  • 修复了由 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 变更

  • 修复了与 Java 中 Lifecycle 2.3 及更高版本 Lifecycle 的兼容性问题。(I52c8ab/219545060

bug 修复

  • SavedStateViewFactory 现在支持使用 CreationExtras,即使其通过 SavedStateRegistryOwner 进行初始化也不受影响。如果提供 extra,则会忽略初始化的参数。(I6c43bb/224844583

版本 2.5.0-alpha04

2022 年 3 月 9 日

发布了 androidx.lifecycle:lifecycle-*:2.5.0-alpha04版本 2.5.0-alpha04 中包含这些提交内容

API 变更

  • SavedStateHandle 现在提供了一个 getStateFlow() API,该 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,以允许添加用于处理特定 ViewModel 类的 lambda,并使用 CreationExtras 作为主要数据源。(If58fcb/216687549
  • lifecycle-viewmodel-compose 现在提供了一个 viewModel() API,该 API 支持使用 lambda 工厂创建 ViewModel 实例,而无需创建自定义 ViewModelProvider.Factory。(I97fbbb/216688927

API 变更

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

行为变更

  • 现在,无论 Lifecycle 是否附有观察器,尝试将 Lifecycle.StateINITIALIZED 转换为 DESTROYED 时始终会抛出 IllegalStateException。(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。此项更改提升了这两个类中的泛型的可为 null 性。 (Ib6ce2b/216168263I9647ab/177667711
  • LiveData switchMap 函数参数现在可以具有可为 null 的输出。(I40396b/132923666
  • LiveData -ktx 扩展现在使用 @CheckResult 添加注释,以便在调用这些函数时强制使用相应结果。(Ia0f05b/207325134

行为变更

  • 现在,如果指定的键没有值,SavedStateHandle 可正确存储 defaultValue。(I1c6ceb/178510877

bug 修复

  • 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 时,默认提供这些 extra。如果使用这些库的早期版本,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
    }
}

我们会在 SavedStateHandleSupport 中对 CreationExtras 使用 createSavedStateHandle() Kotlin 扩展函数,仅为需要 SavedStateHandle 的那个 ViewModel 构造一个 SavedStateHandle。(Ia6654b/188541057

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

bug 修复

  • 修复了以下问题:即使已专门从 SavedStateHandle 中移除,提供给 SavedStateHandle 的默认值也会在进程终止和重新创建后重新出现。因此,SavedStateHandle 不再将默认值和恢复的值合并在一起,而是仅使用恢复的值作为可信来源。(I53a4b)

版本 2.4

版本 2.4.1

2022 年 2 月 9 日

发布了 androidx.lifecycle:lifecycle-*:2.4.1版本 2.4.1 中包含这些提交内容

bug 修复

  • 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 方法不再允许使用可为 null 的泛型。
  • androidx.lifecycle:lifecycle-runtime-ktx 添加了新的协程 API:
  • Lifecycle.repeatOnLifecycle - 当 Lifecycle 至少处于某个状态时,此 API 会在协程中执行代码块。当 Lifecycle 进入和退出目标状态时,该代码块将取消并重新启动;
  • Flow.flowWithLifecycle - 当 Lifecycle 至少处于某个状态时,此 API 会发出来自上游 flow 的值。
  • 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-common 中。androidx.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 方法不再允许使用可为 null 的泛型。(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 检查,可检测何时在 onStart()onResume() 中错误地使用了 repeateOnLifecycle。(706078b/187887400

API 变更

  • 移除了 LifecycleOwner.addRepeatingJob API,改为使用 Lifecycle.repeatOnLifecycle,后者遵循结构化并发的要求,并且易于推断。(I4a3a8)
  • ProcessLifecycleInitializer 设为公开,以便其他 androidx.startup.Initializer 可将其用作依赖项。(I94c31)

bug 修复

  • 修复了当字段包含修饰符时 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,当生命周期至少处于使用 Lifecycle.repeatOnLifecycle API 的某个状态时,此 API 会发出来自上游 flow 的值。这是 LifecycleOwner.addRepeatinJob API(也是新增的 API)的替代方案。(I0f4cd)

bug 修复

  • Lifecycle 2.3.1 开始:现在,NonNullableMutableLiveData lint 规则可以正确区分具有不同的可为 null 性的字段变量。(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 兼容。

bug 修复

  • 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 现在会返回可为 null 的 ViewModelStoreOwner,以更好地确定 ViewModelStoreOwner 在当前组合中是否可用。如果未设置 ViewModelStoreOwner,则需要 ViewModelStoreOwner 的 API(例如 viewModel()NavHost)仍会抛出异常。(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 中包含这些提交内容

bug 修复

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

版本 2.3.0

版本 2.3.0

2021 年 2 月 10 日

发布了 androidx.lifecycle:lifecycle-*:2.3.0版本 2.3.0 中包含这些提交内容。

自 2.2.0 以来的重要变更

  • 对非 Parcelable 类的 SavedStateHandle 支持SavedStateHandle 现在允许您针对指定键调用 setSavedStateProvider() 以支持延迟序列化,从而提供 SavedStateProvider,该构造函数会在 SavedStateHandle 被要求保存其状态时获得对 saveState() 的回调。请参阅保存非 Parcelable 类
  • Lifecycle 行为强制执行
    • LifecycleRegistry 现在强制将 DESTROYED 作为终止状态。
    • LifecycleRegistry 现在会验证其方法是否在主线程上调用。它始终是 activity、fragment 等的生命周期的一项要求。非主线程上的观察对象增加会导致难以在运行时捕获崩溃。对于您自己的组件拥有的 LifecycleRegistry 对象,您可以通过使用 LifecycleRegistry.createUnsafe(...) 明确停止检查,但之后您必须确保从其他线程访问 LifecycleRegistry 时,系统会进行适当的同步。
  • 生命周期状态和事件辅助程序:向 Lifecycle.Event 添加了 downFrom(State)downTo(State)upFrom(State)upTo(State) 的静态辅助方法,以便在生成 Event 时提供 State 和过渡方向。添加了 getTargetState() 方法,该方法会提供 Lifecycle 在 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 或更高版本,才能正确填充此 API。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 中包含这些提交内容。

bug 修复

  • 现在,在保存状态前后,SavedStateHandlekeys() 方法会保持一致。除了与 set()getLiveData() 一起使用的键外,现在还会包含先前与 setSavedStateProvider() 一起使用的键。(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)

bug 修复

文档变更

  • 更新了 liveData 构建器和 asLiveData() 文档,添加了关于更改指定超时值的详细信息。(aosp/1122324)

版本 2.3.0-alpha07

2020 年 8 月 19 日

发布了 androidx.lifecycle:lifecycle-*:2.3.0-alpha07版本 2.3.0-alpha07 中包含这些提交内容

bug 修复

  • 修复了 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) 的静态辅助方法,以便在生成 Event 时提供 State 和过渡方向。添加了 getTargetState() 方法,该方法会提供 Lifecycle 在 Event 结束后将直接过渡到的 State。(I00887)
  • 添加了 Lifecycle.withStateAtLeast API,这些 API 会等待某个生命周期状态,并在状态发生变化时同步运行非挂起代码块,然后继续执行结果。这些 API 与现有的 when* 方法不同,因为它们不允许运行暂停代码,且不使用自定义调度程序。(aosp/1326081)

行为变更

  • LifecycleRegistry 现在强制将 DESTROYED 作为终止状态。(I00887)
  • LifecycleRegistry 现在会验证其方法是否在主线程上调用。它始终是 activity、fragment 等的生命周期的一项要求。非主线程上的观察对象增加会导致难以在运行时捕获崩溃。对于您自己的组件拥有的 LifecycleRegistry 对象,您可以通过使用 LifecycleRegistry.createUnsafe(...) 明确停止检查,但之后您必须确保从其他线程访问 LifecycleRegistry 时,系统会进行适当的同步(Ie7280b/137392809

bug 修复

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

版本 2.3.0-alpha05

2020 年 6 月 24 日

发布了 androidx.lifecycle:lifecycle-*:2.3.0-alpha05版本 2.3.0-alpha05 中包含这些提交内容

bug 修复

  • 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 中包含这些提交内容

bug 修复

  • 修复了 NonNullableMutableLiveData Lint 检查中出现崩溃的问题。(b/157294666)
  • NonNullableMutableLiveData Lint 检查现在涵盖了满足以下条件的更多用例:使用非 null 类型参数在 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,才能正确填充此 API。已向 lifecycle-viewmodel-ktx 添加了 findViewModelStoreOwner() Kotlin 扩展。(aosp/1295522)

bug 修复

版本 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)

bug 修复

  • 通过避免在 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,才能正确填充此 API。lifecycle-runtime-ktx 中提供了 findViewTreeLifecycleOwner Kotlin 扩展。(aosp/1182361aosp/1182956
  • 添加了新的 Lint 检查,可在您为 Kotlin 中定义为非 null 的 MutableLiveData 设置 null 值时发出警告。此检查在使用 livedata-core-ktxlivedata-ktx 工件时可用。(aosp/1154723aosp/1159092
  • 发布了新的 lifecycle-runtime-testing 工件,该工件提供可实现 LifecycleOwnerTestLifecycleOwner,以及线程安全的可变 Lifecycle。(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()。您可以将 FragmentFragmentActivity 传递给新的 ViewModelProvider(ViewModelStoreOwner) 构造函数,以便在使用 Fragment 1.2.0 时实现相同的功能。
  • 废弃 lifecycle-extensions 制品:随着上方所述的 ViewModelProviders.of() 废弃,此版本标志着废弃了 lifecycle-extensions 中的最后一个 API,因此现在该制品已完全被废弃。我们强烈建议依赖于您需要的特定 Lifecycle 制品(例如,如果您使用的是 LifecycleService,则依赖于 lifecycle-service;如果您使用的是 ProcessLifecycleOwner,则依赖于 lifecycle-process)而不是 lifecycle-extensions,因为将来不会有 lifecycle-extensions2.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 修复

  • 修复了在 ViewModelStore 中存储模拟 ViewModel 而后以默认出厂设置查询它时出现的错误。
  • 修复了在 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 设置中的 bug,在目标 API 低于 29 的情况下,该 bug 会影响运行 API 28 以上级别的设备。(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 中引入的 ProcessLifecycleOwner 顺序以及 Activity 的 LifecycleOwner 在 Android 10 设备上迁移到启动和恢复状态的回归问题。(aosp/1128132)
  • 修复了 Lifecycle 2.2.0-alpha05 中引入的在使用 2.0.02.1.0lifecycle-process 时会导致 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 生成工具,以接收 Duration 参数作为类型 timeout

版本 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 类的构造函数以及 Fragment 默认提供的工厂中接收此对象,并且 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 可为 savedstate 做出贡献。为此,您可以使用新引入的 ViewModel 的出厂 SavedStateVMFactory,并且 ViewModel 应该具有一个可接收 SavedStateHandle 对象作为参数的构造函数。

版本 2.1.0

自 2.0.0 以来的重要变更

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

版本 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。点击此处可查看此版本中包含的提交内容。

新功能

  • Lifecycle 已升级为测试版:在以前的 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 之外,第二个接口也会因 by viewmodels {} Kotlin 属性委托而无法与新功能完美搭配使用。(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 值发生更改后发出一个值。
  • 在 ViewModel 中添加了协程支持:添加了 ViewModel.viewModelScope 扩展属性。
  • 添加了 ViewModelProvider.KeyedFactory,它是 ViewModel 的出厂设置,可接收 create 方法中的 keyClass

版本 2.0.0

版本 2.0.0

2018 年 9 月 21 日

发布了 Lifecycle 2.0.0,与 2.0.0-rc01 相比,该版本修复了 ViewModel 中的一个 bug。

bug 修复

  • 修复了错误地移除了构造函数的 ViewModel ProGuard 规则 b/112230489

版本 2.0.0-beta01

2018 年 7 月 2 日

bug 修复

  • 修复了 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,而只会影响像 Paging 一样直接依赖于 lifecycle:common 的模块。

版本 1.1.0

2018 年 1 月 22 日

打包变更

现在可使用小得多的新增依赖项:

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

API 变更

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