生命周期
此表列出了 androidx.lifecycle
组中的所有工件。
工件 | 稳定版 | 候选版本 | Beta 版 | Alpha 版 |
---|---|---|---|---|
lifecycle-* | 2.8.5 | - | - | 2.9.0-alpha02 |
lifecycle-viewmodel-compose | 2.8.5 | - | - | 2.9.0-alpha02 |
声明依赖项
要添加对生命周期的依赖项,您必须将 Google Maven 存储库添加到您的项目中。阅读Google 的 Maven 存储库以了解更多信息。
在应用或模块的 build.gradle
文件中添加所需工件的依赖项
Kotlin
Groovy
dependencies { def lifecycle_version = "2.8.5" 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.5" 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.5" 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.5" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // Annotation processor annotationProcessor("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
有关依赖项的更多信息,请参阅添加构建依赖项。
反馈
您的反馈有助于改进 Jetpack。如果您发现新的问题或有改进此库的想法,请告诉我们。在创建新问题之前,请查看此库中现有问题。您可以通过点击星形按钮为现有问题添加您的投票。
有关更多信息,请参阅问题跟踪器文档。
版本 2.9
版本 2.9.0-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 多平台
lifecycle-testing
现在与 KMP 兼容。(Iea41e)- 添加对
linuxArm64
Kotlin 多平台目标的支持 (I139d3,b/338268719)
新功能
- 一个新的
androidx.lifecycle:lifecycle-viewmodel-testing
KMP 工件可用,它提供了一个ViewModelScenario
类用于独立测试 ViewModel,并支持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
现在实现了equals
、hashCode
和toString
方法。(Ib4353)NewInstanceFactory
现在在 JVM 桌面和 Android 目标上可用。(d3d0892)- 内联扩展属性,用于在 Kotlin 语言版本 2.0 中安全地公开底层应用程序 (I39df2)
错误修复
- 删除了对新平台 API 的手动概述,因为在使用 R8 和 AGP 7.3 或更高版本(例如 R8 版本 3.3)时,以及在使用 AGP 8.1 或更高版本(例如 D8 版本 8.1)时,所有构建都会通过 API 建模自动执行此操作。建议未使用 AGP 的客户端更新到 D8 版本 8.1 或更高版本。有关更多详细信息,请参阅这篇文章。(If6b4c,b/345472586)
版本 2.8
版本 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()
现在可以正确处理在接收已在LiveData
上设置的值后立即完成返回的 Flow 的情况(例如,在使用take(1)
时)。(I9c566)Lifecycle*Effect
完成现在是幂等的(即,如果由于 Lifecycle 停止而调用了onStopOrDispose
,则除非 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 工件保留其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
工件现在包含dropUnlessResumed
和dropUnlessStarted
API,这些 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
。它现在支持使用允许通过getCloseable()
检索它们的key
添加AutoCloseable
对象。在没有键的情况下调用
LifecycleStartEffect
和LifecycleResumeEffect
现在是一个错误,遵循与这些 API 镜像的DisposableEffect
API 相同的约定。已弃用
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
,改为使用LiveData.toPublisher(lifecycleOwner)
。lifecycle-livedata-core-ktx
Kotlin 扩展现在已移动到lifecycle-livedata-core
模块。NullSafeMutableLiveData
已重构,以避免许多误报。
Lifecycle Kotlin 多平台兼容性
Lifecycle
、LifecycleOwner
、LifecycleObserver
、Lifecycle.State
、Lifecycle.Event
和 LifecycleRegistry
中的核心 Lifecycle API 现在以与 Kotlin 多平台兼容的工件形式提供。
受影响的工件
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 多平台兼容性
lifecycle-viewmodel
工件和 ViewModel
、ViewModelStore
、ViewModelStoreOwner
和 ViewModelProvider
等 API 现在以与 Kotlin 多平台兼容的工件形式提供。
为了适应此更改,例如在 ViewModelProvider
上采用 java.lang.Class<T>
的方法现在具有采用 kotlin.reflect.KClass<T>
的等效方法。
Android 上的二进制兼容性已得到维护,但在比较 Android API 表面和通用 API 表面时,有一些值得注意的变化。
- 现在通过
ViewModelProvider.create()
方法而不是直接调用其构造函数来构建ViewModelProvider
实例。 ViewModelProvider.NewInstanceFactory
和ViewModelProvider.AndroidViewModelFactory
仅在 Android 上可用。- 建议自定义工厂从
ViewModelProvider.Factory
扩展并使用带有CreationExtras
的create
方法,或者使用viewModelFactory
Kotlin DSL。
- 建议自定义工厂从
- 在非 JVM 平台上不使用自定义工厂使用
ViewModelProvider
将导致UnsupportedOperationException
。在 JVM 平台上,如果未提供自定义工厂,则通过使用无参 ViewModel 构造函数来保留兼容性。 viewModelScope
将回退到EmptyCoroutineContext
,在Dispatchers.Main
不可用(例如,Linux)的平台上。
受影响的工件
lifecycle-viewmodel
将大多数 API 移动到common
,除了 Android 之外,还支持 jvm 和 iOS。lifecycle-viewmodel-ktx
现在为空,所有 API 都已移动到lifecycle-viewmodel
中。lifecycle-viewmodel-compose
将所有 API 移动到common
并提供 Android 工件,这与androidx.compose
的多平台支持相匹配。
行为变更
InitializerViewModelFactory
(包括viewModelFactory
构建器函数)如果已经添加了具有相同clazz: KClass<VM : ViewModel>
的initializer
,则现在将抛出IllegalArgumentException
。(Ic3a36)
已知问题
lifecycle-*:2.8.0
需要 Compose 的最低版本为 1.7.0-alpha05(b/336842920)。
版本 2.8.0-rc01
2024 年 5 月 1 日
androidx.lifecycle:lifecycle-*:2.8.0-rc01
已发布。版本 2.8.0-rc01 包含 这些提交。
错误修复
- 修复了
lifecycle-common
类别的基线配置文件未正确打包的问题。这些现在打包在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
工件与 Kotlin 多平台兼容,将其代码移动到common
并提供 Android 工件,这与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
工件与 Kotlin 多平台兼容,将其代码移动到common
并提供 Android 工件,这与androidx.compose
的多平台支持相匹配。为了适应此更改,ComposableviewModel
方法现在除了接受java.lang.Class
之外,还接受KClass
。(b/330323282)
错误修复
依赖项更新
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
重写默认值。(I2817c,b/264598574)class MyViewModel( // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob() ) : ViewModel(viewModelScope) { // Use viewModelScope as before, without any code changes } // Allows overriding the viewModelScope in a test fun Test() = runTest { val viewModel = MyViewModel(backgroundScope) }
Kotlin 多平台兼容性
现在 lifecycle-viewmodel
工件和 ViewModel
、ViewModelStore
、ViewModelStoreOwner
和 ViewModelProvider
等 API 在与 Kotlin 多平台兼容的工件中提供。(b/214568825)
为了适应此更改,例如在 ViewModelProvider
上采用 java.lang.Class<T>
的方法现在具有采用 kotlin.reflect.KClass<T>
的等效方法。
Android 上的二进制兼容性已得到维护,但在比较 Android API 表面和通用 API 表面时,有一些值得注意的变化。
- 现在通过
ViewModelProvider.create()
方法而不是直接调用其构造函数来构建ViewModelProvider
实例。 ViewModelProvider.NewInstanceFactory
和ViewModelProvider.AndroidViewModelFactory
仅在 Android 上可用。- 建议自定义工厂从
ViewModelProvider.Factory
扩展并使用带有CreationExtras
的create
方法,或者使用viewModelFactory
Kotlin DSL。
- 建议自定义工厂从
- 在非 JVM 平台上不使用自定义工厂使用
ViewModelProvider
将导致UnsupportedOperationException
。在 JVM 平台上,如果未提供自定义工厂,则通过使用无参 ViewModel 构造函数来保留兼容性。 viewModelScope
将回退到EmptyCoroutineContext
,在Dispatchers.Main
不可用(例如,Linux)的平台上。
行为变更
InitializerViewModelFactory
(包括viewModelFactory
构建器函数)如果已经添加了具有相同clazz: KClass<VM : ViewModel>
的initializer
,则现在将抛出IllegalArgumentException
。(Ic3a36)
错误修复
ViewModel.getCloseable
现在处理重复的键:如果key
已经有一个AutoCloseable
资源与其关联,则旧资源将被立即替换并关闭。(Ibeb67)- 现在访问
ViewModel
的viewModelScope
是线程安全的。(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 包含这些提交。
新功能
- 已添加
dropUnlessResumed
和dropUnlessStarted
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 多平台兼容性
Lifecycle
、LifecycleOwner
、LifecycleObserver
、Lifecycle.State
、Lifecycle.Event
和LifecycleRegistry
中的核心生命周期 API 现在在与 Kotlin 多平台兼容的工件中提供。(b/317249252)
API 更改
- 现在,在没有键的情况下调用
LifecycleStartEffect
和LifecycleResumeEffect
会导致错误,这遵循与这些 API 镜像的DisposableEffect
API 相同的约定。(Ib0e0c,b/323518079) ViewModel
现在使用AutoCloseable
而不是Closeable
。这是一个向后兼容的更改。(I27f8e,b/214568825)- 弃用
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
,改为使用LiveData.toPublisher(lifecycleOwner)
。(Iabe29,b/262623005)
外部贡献
- 感谢 Jetbrains 的 Ivan Matkov 帮助将 Lifecycle 移动到 Kotlin 多平台。(aosp/2926690,I0c5ac,If445d)
版本 2.8.0-alpha01
2024 年 1 月 24 日
androidx.lifecycle:lifecycle-*:2.8.0-alpha01
已发布。版本 2.8.0-alpha01 包含这些提交。
新功能
ViewModel
现在支持添加带有key
的Closeable
对象,该键允许通过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
提供的协程)中安全使用。LiveData
的map
和switchMap
扩展现在反映了distinctUntilChanged
的行为 - 如果LiveData
设置了value
,则将 *立即* 调用map
/switchMap
函数来填充返回的LiveData
的value
。这确保初始值将在第一次组合(在与observeAsState()
一起使用时)中设置,但不会更改观察行为 - 来自源LiveData
的更新值仍将仅在您开始观察LiveData
后应用。- 此版本修复了一个问题,即在进程死亡和重新创建后,
SavedStateHandle
无法正确恢复自定义的Parcelable
类。由于 Android 框架丢失了类型信息,因此自定义 Parcelable 的数组需要额外的工作(手动创建正确类型的类型化数组),并且关于get
、getLiveData
和getStateFlow
的文档现在专门指出了此限制。 - 与
LifecycleObserver
相关的 ProGuard 保留规则已被删除。这意味着希望通过反射使用 API 的 ProGuard 代码(例如使用早已弃用的@OnLifecycleEvent
注解)将需要为其特定用例提供自己的保留规则。
生命周期事件可观察性
- 作为使用
LifecycleEventObserver
的替代方案,您现在可以通过Lifecycle.asFlow()
扩展方法观察Lifecycle.Event
的Flow
。 - Jetpack Compose 用户现在可以使用
LifecycleEventEffect
根据Lifecycle.Event
运行 Compose 副作用。
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
viewModel.refreshData()
}
// …
}
- Jetpack Compose 用户可以使用
LifecycleStartEffect
和LifecycleResumeEffect
处理成对的事件 - 分别从启动到停止和从恢复到暂停。此 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
直接公开为 ComposeState
。这等效于(并且是lifecycle.currentStateFlow.collectAsState()
的更简短替代方案)。
有关更多信息,请参阅使用流收集生命周期状态。
版本 2.7.0-rc02
2023 年 12 月 13 日
androidx.lifecycle:lifecycle-*:2.7.0-rc02
已发布。 版本 2.7.0-rc02 包含这些提交。
错误修复
- 修复了
SavedStateHandle
在进程死亡和重新创建后无法正确恢复自定义Parcelable
类的问题。由于 Android 框架丢失了类型信息,因此自定义 Parcelable 的数组需要额外的工作(手动创建正确类型的类型化数组),并且关于get
、getLiveData
和getStateFlow
的文档现在专门指出了此限制。(I0b55a)
版本 2.7.0-rc01
2023 年 11 月 15 日
androidx.lifecycle:lifecycle-*:2.7.0-rc01
已发布。 版本 2.7.0-rc01 包含这些提交。
错误修复
LifecycleStartEffect
和LifecycleResumeEffect
现在如果LifecycleOwner
发生更改,则会正确地释放和重新创建效果块。(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
字段来设置TestLifecycleOwner
的Lifecycle.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()
扩展方法现在会设置返回的LiveData
的value
(如果之前的LiveData
已设置了值),确保在 Jetpack Compose 中使用结果 LiveData 在初始合成时具有正确的状态。(I91d2b,b/269479952)ViewModel
的addCloseable()
现在会立即关闭Closeable
(如果ViewModel
已收到对onCleared()
的调用)。(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_RESUME
和Lifecycle.Event.ON_PAUSE
事件回调运行 ComposeSideEffect
。(I60386,b/235529345) - 已添加
LifecycleStartEffect
API,以根据Lifecycle.Event.ON_START
和Lifecycle.Event.ON_STOP
事件回调运行 ComposeSideEffect
。(I5a8d1,b/235529345) - 已添加
LifecycleEventEffect
API,以根据Lifecycle.Event
运行 ComposeSideEffect
。(Ic9794,b/235529345) - 已添加
Lifecycle.collectAsState()
扩展方法,以将Lifecycle.State
直接公开为 ComposeState
。这等效于(并且是lifecycle.currentStateFlow.collectAsState()
的更简短替代方案)。(I11015,b/235529345)
错误修复
LiveData.distinctUntilChanged()
扩展方法现在会设置返回的LiveData
的value
(如果之前的LiveData
已设置了值)。这不会更改观察行为 - 来自源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
在进程死亡后不会被正确恢复,save()
被调用但实际上没有在父SavedStateRegistry
中保存状态,然后状态再次被恢复。这修复了rememberSaveable
和 Navigation Compose 的NavHost
之间的交互。(aosp/2729289)
版本 2.6.1
2023 年 3 月 22 日
androidx.lifecycle:lifecycle-*:2.6.1
已发布。 版本 2.6.1 包含这些提交。
依赖项更新
lifecycle-viewmodel-savedstate
现在依赖于SavedState1.2.1
。(cd7251)- Lifecycle 现在依赖于ProfileInstaller
1.3.0
。(f9d30b)
版本 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
现在包含一个构造函数来设置初始值。- 在
StateFlow
和Flow
上添加了一个新的扩展collectAsStateWithLifecycle()
,它从 Flow 中收集数据,并以生命周期感知的方式将其最新值表示为 Compose 状态。 Lifecycle.launchWhenX
方法和Lifecycle.whenX
方法已弃用,因为在某些情况下使用暂停调度程序会导致资源浪费。建议使用Lifecycle.repeatOnLifecycle
。有关一次性挂起工作的更多信息,请参阅 此说明,了解为什么这本质上是不安全的。- Kotlin 转换 - 大量 Lifecycle 类已转换为 Kotlin。所有转换后的类仍保持与先前版本的二进制兼容性。以下类对用 Kotlin 编写的类进行了源不兼容更改:
ViewTreeLifecycleOwner
、LiveDataReactiveStreams
、HasDefaultViewModelProviderFactory
、ViewTreeViewModelStoreOwner
、Transformations
、ViewModelStoreOwner
、LifecycleOwner
下表提供了新版本生命周期的源转换。
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 中创建的
Observer
的onChanged
方法的可空性现在与泛型类型可空性匹配。如果希望Observer.onChanged()
接受可空类型,则必须使用可空类型实例化Observer
。 - 这些类也已转换为 Kotlin,但保持源兼容:
DefaultLifecycleObserver
、LifecycleEventObserver
、Lifecycle
、LifecycleRegistry
、LifecycleObserver
、ViewModelStore
、AndroidViewModel
、AbstractSavedStateViewModelFactory
、LifecycleService
、ServiceLifecycleDispatcher
和ProcessLifecycleOwner
版本 2.6.0-rc01
2023 年 2 月 22 日
androidx.lifecycle:lifecycle-*:2.6.0-rc01
已发布。 版本 2.6.0-rc01 包含这些提交。
错误修复
LiveData.distinctUntilChanged()
扩展方法现在会设置返回的LiveData
的value
(如果之前的LiveData
已设置了值)。这不会更改观察行为 - 来自源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()
函数。(I75b4b,b/240298691)ViewModelStoreOwner
现在使用 Kotlin 编写。对于用 Kotlin 编写的类来说,这是一个源不兼容的更改 - 它们现在必须覆盖viewModelStore
属性,而不是实现以前的getViewModelStore()
函数。(I86409,b/240298691)- 提供
lifecycleScope
字段的LifecycleOwner
上的 Kotlin 扩展已从lifecycle-runtime-ktx
移动到lifecycle-common
工件。(I41d78,b/240298691) - 提供
coroutineScope
字段的Lifecycle
上的 Kotlin 扩展已从lifecycle-runtime-ktx
移动到lifecycle-common
工件。(Iabb91,b/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
方法的这些方法版本已弃用,并替换为采用 KotlinFunction1
的版本。此更改保持二进制兼容性。(I8e14f)ViewTreeViewModelStoreOwner
现在使用 Kotlin 编写。对于用 Kotlin 编写的类来说,这是一个源不兼容的更改 - 您现在必须直接导入并在View
上使用androidx.lifecycle.setViewTreeViewModelStoreOwner
和androidx.lifecycle.findViewTreeViewModelStoreOwner
的 Kotlin 扩展方法来设置和查找以前设置的所有者。这是二进制兼容的,并且对于用 Java 编程语言编写的实现保持源兼容。(Ia06d8,Ib22d8,b/240298691)HasDefaultViewModelProviderFactory
接口现在使用 Kotlin 编写。对于用 Kotlin 编写的类来说,这是一个源不兼容的更改 - 它们现在必须覆盖defaultViewModelProviderFactory
和defaultViewModelCreationExtras
属性,而不是实现以前的相应函数。(Iaed9c,b/240298691)Observer
现在使用 Kotlin 编写。其onChanged()
方法现在为其参数使用名称value
。(Iffef2,I4995e,b/240298691)AndroidViewModel
、AbstractSavedStateViewModelFactory
、LifecycleService
、ServiceLifecycleDispatcher
和ProcessLifecycleOwner
现在使用 Kotlin 编写(I2e771,Ibae40,I160d7,I08884,I1cda7,b/240298691)
版本 2.6.0-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-compose
的collectAsStateWithLifecycle()
API 现已不再处于实验状态。(I09d42,b/258835424)Lifecycle.launchWhenX
方法和Lifecycle.whenX
方法已弃用,因为在某些情况下使用暂停调度程序会导致资源浪费。建议使用Lifecycle.repeatOnLifecycle
。(Iafc54,b/248302832)
Kotlin 转换
ViewTreeLifecycleOwner
现在使用 Kotlin 编写。对于用 Kotlin 编写的类来说,这是一个源不兼容的更改 - 您现在必须直接导入并在View
上使用androidx.lifecycle.setViewTreeLifecycleOwner
和androidx.lifecycle.findViewTreeLifecycleOwner
的 Kotlin 扩展方法来设置和查找以前设置的所有者。这替换了lifecycle-runtime-ktx
中以前的 Kotlin 扩展。这是二进制兼容的,并且对于用 Java 编程语言编写的实现保持源兼容。(I8a77a,I5234e,b/240298691)LiveDataReactiveStreams
现在使用 Kotlin 编写。以前在lifecycle-reactivestreams-ktx
中的 Kotlin 扩展已移动到lifecycle-reactivestreams
模块中,并成为用 Kotlin 编写的代码的主要界面。如果之前没有使用 Kotlin 扩展方法 API,则对于用 Kotlin 编写的代码来说,这是一个源不兼容的更改。(I2b1b9,I95d22,b/240298691)DefaultLifecycleObserver
、LifecycleEventObserver
、Lifecycle
、LifecycleRegistry
、LifecycleObserver
和ViewModelStore
现在已使用 Kotlin 编写(Iadffd,(I60034、I8c52c、I9593d、I01fe1、I59a23、b/240298691)。
错误修复
- 当使用不正确的类类型调用
get()
时,SavedStateHandle
不会再出现ClassCastException
崩溃。(I6ae7c)。
版本 2.6.0-alpha03
2022 年 10 月 24 日
androidx.lifecycle:lifecycle-*:2.6.0-alpha03
已发布。 版本 2.6.0-alpha03 包含以下提交。
错误修复
- 修复了不同 Lifecycle 模块之间约束无法按预期工作的问题。(I18d0d、b/249686765)。
LifecycleRegistry.moveToState()
引发的错误现在包含更有帮助的错误消息,告知开发者导致错误的组件。(Idf4b2、b/244910446)。
版本 2.6.0-alpha02
2022 年 9 月 7 日
androidx.lifecycle:lifecycle-*:2.6.0-alpha02
已发布。 版本 2.6.0-alpha02 包含以下提交。
API 更改
MediatorLiveData
现在包含一个构造函数来设置初始值。(Ib6cc5、b/151244085)。
错误修复
Lifecycle
工件现在包含 约束,以确保所有相互依赖的 Lifecycle 工件使用相同的版本,并在升级其中一个依赖项时自动升级其他依赖项。 b/242871265FlowLiveData.asFlow()
现在创建了一个callbackFlow
,而不是使用它自己的Channel
实现来确保线程安全和上下文保留。(I4a8b2、b/200596935)。FlowLiveData
的asLiveData
函数现在将在创建新的LiveData
对象时保留StateFlow
的初始值。(I3f530、b/157380488)。- 来自 Lifecycle
2.5.1
:AndroidViewModelFactory
的自定义实现现在在使用带Lifecycle
2.4+ 的有状态构造函数时正确调用create(modelClass)
函数。(I5b315、b/238011621)。
版本 2.6.0-alpha01
2022 年 6 月 29 日
androidx.lifecycle:lifecycle-*:2.6.0-alpha01
已发布。 版本 2.6.0-alpha01 包含以下提交。
新功能
- 在
StateFlow
和Flow
上添加了一个新的扩展collectAsStateWithLifecycle
,它从流中收集并以生命周期感知的方式将其最新值表示为 Compose 状态。当生命周期至少处于某个Lifecycle.State
时,流将被收集,新的发射将设置为状态的值。当生命周期低于该Lifecycle.State
时,流收集将停止,并且状态的值不会更新。(I1856e、b/230557927)。
版本 2.5
版本 2.5.1
2022 年 7 月 27 日
androidx.lifecycle:lifecycle-*:2.5.1
已发布。 版本 2.5.1 包含以下提交。
错误修复
AndroidViewModelFactory
的自定义实现现在在使用带Lifecycle
2.4+ 的有状态AndroidViewModelFactory
构造函数时正确调用create(modelClass)
函数。(I5b315、b/238011621)。
版本 2.5.0
2022 年 6 月 29 日
androidx.lifecycle:lifecycle-*:2.5.0
已发布。 版本 2.5.0 包含以下提交。
自 2.4.0 以来重要的更改
SavedStateHandle
现在提供了一个getStateFlow()
API,它返回一个 KotlinStateFlow
用于监视值更改,作为使用LiveData
的替代方案。ViewModel 创建额外信息 - 在编写自定义
ViewModelProvider.Factory
时,不再需要扩展AndroidViewModelFactory
或AbstractSavedStateViewModelFactory
来访问Application
或SavedStateHandle
。相反,这些字段作为CreationExtras
通过create
的新重载提供给**每个**ViewModelProvider.Factory
子类:create(Class<T>, CreationExtras)
。当使用 Activity1.5.0
和 Fragment1.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,允许类似于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 但通过测试控制的协程作用域,您可以创建一个实现
Closeable
的CoroutineScope
class CloseableCoroutineScope( context: CoroutineContext = SupervisorJob() + Dispatchers.Main.immediate ) : Closeable, CoroutineScope { override val coroutineContext: CoroutineContext = context override fun close() { coroutineContext.cancel() } }
然后可以在您的
ViewModel
构造函数中使用它,同时保持与viewModelScope
相同的生命周期class TestScopeViewModel( val customScope: CloseableCoroutineScope = CloseableCoroutineScope() ) : ViewModel(customScope) { // You can now use customScope in the same way as viewModelScope }
行为更改
- 尝试将
Lifecycle.State
从INITIALIZED
移动到DESTROYED
现在将始终抛出IllegalStateException
,无论Lifecycle
是否有附加的观察者。 LifecycleRegistry
现在将在它们达到DESTROYED
状态时清除它们的观察者。
版本 2.5.0-rc02
2022 年 6 月 15 日
androidx.lifecycle:lifecycle-*:2.5.0-rc02
已发布。 版本 2.5.0-rc02 包含以下提交。
错误修复
ViewModelProvider
在将早期版本的 compileOnly Lifecycle 依赖项与版本 2.5+ 混合使用时,将不再崩溃。(I81a66、b/230454566)。
版本 2.5.0-rc01
2022 年 5 月 11 日
androidx.lifecycle:lifecycle-*:2.5.0-rc01
已发布。 版本 2.5.0-rc01 包含以下提交。
错误修复
MediatorLiveData.addSource()
在传递null
源时现在会抛出NullPointerException
,而不是将null
源传播到观察者。(Ibd0fb、b/123085232)。
版本 2.5.0-beta01
2022 年 4 月 20 日
androidx.lifecycle:lifecycle-*:2.5.0-beta01
已发布。 版本 2.5.0-beta01 包含以下提交。
API 更改
- 添加了
SavedStateHandle.saveable
属性委托,以使用属性名称作为键将状态持久化到SavedStateHandle
中。(I8bb86、b/225014345)。
错误修复
- 修复了一个问题,即在非主底部导航选项卡中将一个
NavHost
嵌套在另一个NavHost
中,在使用多个返回栈时会导致IllegalStateException
。(I11bd5、b/228865698)。
版本 2.5.0-alpha06
2022 年 4 月 6 日
androidx.lifecycle:lifecycle-*:2.5.0-alpha06
已发布。 版本 2.5.0-alpha06 包含以下提交。
新功能
- 添加了实验性的
MutableState
重载到SavedStateHandle.saveable
中,以与rememberSaveable
保持一致。(I38cfe、b/224565154)。
API 更改
CreationExtras
现在是抽象的而不是密封的。(Ib8a7a)。
错误修复
- 修复了由
SavedStateHandleController
引起的IllegalStateException: Already attached to lifecycleOwner
错误。(I7ea47、b/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
使用的相同保存的实例状态正确集成。(Ia88b7、b/195689777)。
API 更改
- 修复了 Java 中 Lifecycle 2.3 和更新的 Lifecycle 版本之间的兼容性问题。(I52c8a、b/219545060)。
错误修复
SavedStateViewFactory
现在支持即使在使用SavedStateRegistryOwner
初始化时也使用CreationExtras
。如果提供了额外参数,则会忽略初始化参数。(I6c43b,b/224844583)
版本 2.5.0-alpha04
2022 年 3 月 9 日
androidx.lifecycle:lifecycle-*:2.5.0-alpha04
已发布。 版本 2.5.0-alpha04 包含以下提交。
API 更改
SavedStateHandle
现在提供了一个getStateFlow()
API,该 API 返回一个 KotlinStateFlow
用于监控值更改,作为使用LiveData
的替代方案。(Iad3ab,b/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
作为主要数据源。(If58fc,b/216687549)lifecycle-viewmodel-compose
现在提供了一个viewModel()
API,该 API 接受一个用于创建ViewModel
实例的 lambda 工厂,而无需创建自定义的ViewModelProvider.Factory
。(I97fbb,b/216688927)
API 更改
- 您现在可以通过
lifecycle-viewmodel-compose
使用CreationExtras
创建ViewModel
。(I08887,b/216688927)
行为更改
- 尝试将
Lifecycle.State
从INITIALIZED
移动到DESTROYED
现在将始终抛出IllegalStateException
,无论Lifecycle
是否附加了观察者。(I7c390,b/177924329) LifecycleRegistry
现在将在它们到达DESTROYED
状态时清除其观察者。(I4f8dd,b/142925860)
版本 2.5.0-alpha02
2022 年 2 月 9 日
androidx.lifecycle:lifecycle-*:2.5.0-alpha02
已发布。 版本 2.5.0-alpha02 包含以下提交。
API 更改
SavedStateHandle
和SavedStateViewModelFactory
已转换为 Kotlin。这提高了这两个类中泛型的空值性。(Ib6ce2,b/216168263,I9647a,b/177667711)LiveData
的switchMap
函数参数现在可以具有可为空的输出。(I40396,b/132923666)LiveData
的 -ktx 扩展现在使用@CheckResult
进行注释,以强制在调用这些函数时使用结果。(Ia0f05,b/207325134)
行为更改
SavedStateHandle
现在在指定键不存在值时正确地存储 defaultValue。(I1c6ce,b/178510877)
错误修复
- 从 Lifecycle
2.4.1
:更新lifecycle-process
以依赖于 Startup 1.1.1,以确保默认情况下可以使用防止ProcessLifecycleInitializer
抛出StartupException
的修复。(Ib01df,b/216490724) - 当自定义
AndroidViewModel
类中的参数顺序错误并尝试创建ViewModel
时,现在会显示改进的错误消息。(I340f7,b/177667711) - 您现在可以使用
CreationExtras
通过AndroidViewModelFactory
创建视图模型,而无需设置应用程序。(I6ebef,b/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
构造函数参数,通过 SavedStateViewModelFactory
和 AbstractSavedStateViewModelFactory
允许 SavedStateHandle
构造函数参数等),而是转向一个依赖于新概念 CreationExtras
的无状态工厂世界。(Ia7343,b/188691010,b/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-alpha01
、Fragment 1.5.0-alpha01
和 Navigation 2.5.0-alpha01
时,默认情况下会提供这些额外参数。如果您使用这些库的早期版本,则您的 CreationExtras
将为空 - ViewModelProvider.Factory
的所有现有子类都已重写,以支持这些库的早期版本使用的旧版创建路径和将来将使用的 CreationExtras
路径。
这些 CreationExtras
允许您构造一个 ViewModelProvider.Factory
,该工厂仅将您需要的信息传递给每个 ViewModel
,而无需依赖于工厂子类的严格层次结构。
class CustomFactory : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
return when (modelClass) {
HomeViewModel::class -> {
// Get the Application object from extras
val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY])
// Pass it directly to HomeViewModel
HomeViewModel(application)
}
DetailViewModel::class -> {
// Create a SavedStateHandle for this ViewModel from extras
val savedStateHandle = extras.createSavedStateHandle()
DetailViewModel(savedStateHandle)
}
else -> throw IllegalArgumentException("Unknown class $modelClass")
} as T
}
}
我们对来自 SavedStateHandleSupport
的 CreationExtras
使用 createSavedStateHandle()
Kotlin 扩展函数,仅为需要它的一个 ViewModel 构造 SavedStateHandle
。(Ia6654,b/188541057)
可以通过覆盖 ComponentActivity
或 Fragment
中的 getDefaultViewModelCreationExtras()
来提供自定义的 CreationExtras
,从而使它们作为辅助注入的内置形式提供给您的自定义 ViewModelProvider.Factory
。当直接与 ViewModelProvider
一起使用或使用 by viewModels()
和 by activityViewModels()
Kotlin 属性扩展时,这些额外参数将自动提供给您的自定义工厂。(I79f2b,b/207012584,b/207012585,b/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
已弃用。应改用LifecycleEventObserver
或DefaultLifecycleObserver
。- 添加了
androidx.lifecycle:lifecycle-viewmodel-compose
库。它提供viewModel()
可组合函数和LocalViewModelStoreOwner
。- 源代码破坏性更改:
ViewModelProvider
已在 Kotlin 中重写。ViewModelProvider.Factory.create
方法不再允许可为空的泛型。
- 源代码破坏性更改:
- 向
androidx.lifecycle:lifecycle-runtime-ktx
添加了新的协程 API Lifecycle.repeatOnLifecycle
,一个在协程中执行代码块的 API,当 Lifecycle 至少处于特定状态时。当 Lifecycle 进出目标状态时,代码块将取消并重新启动;Flow.flowWithLifecycle
,一个在 Lifecycle 至少处于特定状态时从上游 Flow 发射值的 API。DefaultLifecycleObserver
已从lifecycle.lifecycle-common-java8
移动到lifecycle.lifecycle-common
。lifecycle.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
已弃用。应改用LifecycleEventObserver
或DefaultLifecycleObserver
。(I5a8fa)DefaultLifecycleObserver
已从androidx.lifecycle.lifecycle-common-java8
移动到androidx.lifecycle.lifecycle-common
。androidx.lifecycle.lifecycle-common-java8
不再提供任何超出androidx.lifecycle.lifecycle-common
的额外功能,因此对其的依赖关系可以替换为androidx.lifecycle.lifecycle-common
。(I021aa)lifecycle-viewmodel-ktx
中的非协程 API 已移动到lifecycle-viewmodel
模块。(I6d5b2)
外部贡献
版本 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 检查,用于检测在onStart()
或onResume()
中错误使用repeateOnLifecycle
的情况。(706078,b/187887400)
API 更改
LifecycleOwner.addRepeatingJob
API 已被移除,取而代之的是Lifecycle.repeatOnLifecycle
,它遵循结构化并发,更容易理解。(I4a3a8)- 使
ProcessLifecycleInitializer
公共,以便其他androidx.startup.Initializer
可以将其用作依赖项。(I94c31)
错误修复
- 修复了当字段具有修饰符时
NullSafeMutableLiveData
lint 检查出现的问题。(#147,b/183696616) - 修复了使用泛型时
NullSafeMutableLiveData
lint 检查出现的另一个问题。(#161,b/184830263)
外部贡献
- 感谢 maxsav 改进了
NullSafeMutableLiveData
lint 检查。(#147,b/183696616) - 感谢 kozaxinan 改进了
NullSafeMutableLiveData
lint 检查。(#161,b/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 在 Lifecycle 至少处于特定状态时从上游 Flow 发射值。这是对同样新的LifecycleOwner.addRepeatinJob
API 的替代方案。(I0f4cd)
错误修复
- 来自 Lifecycle 2.3.1:
NonNullableMutableLiveData
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。(I2628d,b/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 兼容(I6f9de,b/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-compose
和androidx.navigation:navigation-compose
同步对androidx.compose.compiler:compiler:1.0.0-beta04
和androidx.compose.runtime:runtime:1.0.0-beta04
的依赖项。对于 1.0.0,编译器和运行时必须匹配。
版本 1.0.0-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
现在有一个provides
函数,可以与CompositionLocalProvider
一起使用,替换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
时已到位正确的同步。
- LifecycleRegistry 现在将
- 生命周期状态和事件帮助器:将
downFrom(State)
、downTo(State)
、upFrom(State)
、upTo(State)
的静态帮助器方法添加到Lifecycle.Event
中,用于根据State
和转换方向生成Event
。添加了getTargetState()
方法,该方法提供Lifecycle
将在Event
后直接转换到的State
。 withStateAtLeast
:添加了Lifecycle.withStateAtLeast
API,这些 API 等待生命周期状态并在状态更改时同步运行非挂起代码块,然后使用结果恢复。这些 API 与现有的when*
方法不同,因为它们不允许运行挂起代码并且不使用自定义调度程序。(aosp/1326081)ViewTree
API:新的ViewTreeLifecycleOwner.get(View)
和ViewTreeViewModelStoreOwner.get(View)
API 允许您分别检索包含的LifecycleOwner
和ViewModelStoreOwner
,给定一个View
实例。您必须升级到 Activity1.2.0
和 Fragment1.3.0
,以及 AppCompat 1.3.0-alpha01 或更高版本才能正确填充此内容。findViewTreeLifecycleOwner
和findViewTreeViewModelStoreOwner
Kotlin 扩展分别在lifecycle-runtime-ktx
和lifecycle-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 包含这些提交。
错误修复
- 现在,
SavedStateHandle
的keys()
方法在保存状态之前和之后保持一致 - 它现在除了使用set()
和getLiveData()
使用的键之外,还包括以前使用setSavedStateProvider()
使用的键。(aosp/1517919,b/174713653)
外部贡献
- 用于 挂起生命周期感知协程 的 API 现在可以更好地处理对
yield()
的调用。感谢 Nicklas Ansman Giertz!(aosp/1430830,b/168777346)
版本 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)
错误修复
- 升级 androidx 以使用 Kotlin 1.4(Id6471,b/165307851,b/165300826)
文档更改
- 已更新
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 包含这些提交。
新功能
- 将
downFrom(State)
、downTo(State)
、upFrom(State)
、upTo(State)
的静态帮助器方法添加到Lifecycle.Event
中,用于根据State
和转换方向生成Event
。添加了getTargetState()
方法,该方法提供Lifecycle
将在Event
后直接转换到的State
。(I00887) - 添加了
Lifecycle.withStateAtLeast
API,这些 API 等待生命周期状态并在状态更改时同步运行非挂起代码块,然后使用结果恢复。这些 API 与现有的when*
方法不同,因为它们不允许运行挂起代码并且不使用自定义调度程序。(aosp/1326081)
行为变更
- LifecycleRegistry 现在将
DESTROYED
强制为终止状态。(I00887) LifecycleRegistry
现在验证其方法是在主线程上调用的。它始终是活动、片段等生命周期的要求。从非主线程添加观察者会导致在运行时难以捕获的崩溃。对于由您自己的组件拥有的LifecycleRegistry
对象,您可以使用LifecycleRegistry.createUnsafe(...)
明确选择退出检查,但随后您必须确保在从不同线程访问此LifecycleRegistry
时已到位正确的同步(Ie7280,b/137392809)
错误修复
- 修复了
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 包含这些提交。
错误修复
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
。您必须升级到 Activity1.2.0-alpha05
、Fragment1.3.0-alpha05
和 AppCompat1.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
,以便更好地支持无法轻松获取 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
。您必须升级到 Activity1.2.0-alpha01
和 Fragment1.3.0-alpha01
以正确填充此内容。一个findViewTreeLifecycleOwner
Kotlin 扩展在lifecycle-runtime-ktx
中可用。(aosp/1182361,aosp/1182956) - 添加了一个新的 Lint 检查,当在 Kotlin 中定义为非空的
MutableLiveData
上设置 null 值时,会发出警告。当使用livedata-core-ktx
或livedata-ktx
工件时,此功能可用。(aosp/1154723,aosp/1159092) - 新的
lifecycle-runtime-testing
工件可用,它提供了一个TestLifecycleOwner
,该对象实现了LifecycleOwner
并提供了一个线程安全的可变Lifecycle
。(aosp/1242438)
错误修复
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
或FragmentActivity
传递给新的ViewModelProvider(ViewModelStoreOwner)
构造函数,以便在使用 Fragment1.2.0
时实现相同的功能。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 包含这些提交。
错误修复
- 修复了当模拟的
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 包含这些提交。
错误修复
- 修复了库的 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 包含这些提交。
错误修复
- 修复了
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 包含这些提交。
错误修复
- 修复了在 Lifecycle 2.2.0-alpha05 中引入的回归,即在 Android 10 设备上
ProcessLifecycleOwner
和 activity 的LifecycleOwner
移动到已启动和已恢复状态的顺序。(aosp/1128132) - 修复了在 Lifecycle
2.2.0-alpha05
中引入的回归,该回归会导致在使用lifecycle-process
的版本2.0.0
或2.1.0
时出现NullPointerException
。(b/141536990)
版本 2.2.0-alpha05
2019 年 9 月 18 日
androidx.lifecycle:lifecycle-*:2.2.0-alpha05
已发布。版本 2.2.0-alpha05 包含这些提交。
错误修复
- 修复了协程 livedata 构建器中的竞争条件。b/140249349
版本 2.2.0-alpha04
2019 年 9 月 5 日
androidx.lifecycle:lifecycle-*:2.2.0-alpha04
已发布。此版本中包含的提交可以在 此处找到。
新功能
lifecycleScope
、whenCreated
、whenStarted
、whenResumed
、viewModelScope
和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
已发布。此版本中包含的提交可以在 此处找到。
新功能
ViewModelStoreOwner
的实现现在可以选择实现HasDefaultViewModelProviderFactory
以提供默认的ViewModelProvider.Factory
。这已在 Activity1.1.0-alpha02
、Fragment1.2.0-alpha02
和 Navigation2.2.0-alpha01
中完成。(aosp/1092370,b/135716331)
API 更改
ViewModelProviders.of()
已弃用。您可以将Fragment
或FragmentActivity
传递给新的ViewModelProvider(ViewModelStoreOwner)
构造函数以实现相同的功能。(aosp/1009889)
版本 2.2.0-alpha02
2019 年 7 月 2 日
androidx.lifecycle:*:2.2.0-alpha02
已发布。此版本中包含的提交可以在 此处找到。
API 更改
- 将
LiveDataScope.initialValue
替换为LiveDataScope.latestValue
,它将跟踪liveData
块当前发出的值。 - 向
liveData
构建器添加了一个新的重载,该构建器接收timeout
参数作为Duration
类型。
版本 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 包含以下提交。
错误修复
- 修复了在
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
,并且仅为请求它的 ViewModel 创建SavedStateHandle
(aosp/1113593)
ViewModel-SavedState 版本 1.0.0-alpha03
2019 年 8 月 7 日
已发布 androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03
。此版本包含的提交可以在 此处 找到。
重大更改
lifecycle-viewmodel-savedstate
不再依赖于fragment
,并且相关的SavedStateViewModelFactory(Fragment)
和SavedStateViewModelFactory(FragmentActivity)
构造函数已被移除。取而代之的是,SavedStateViewModelFactory
现在是 Activity1.1.0-alpha02
、Fragment1.2.0-alpha02
和 Navigation2.2.0-alpha01
的默认工厂。(b/135716331)
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
,在 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
。此版本包含的提交可以在 此处 找到。
新功能
- 生命周期已升级到 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)
错误修复
- 修复了模拟
ViewModel
实例在包含的ViewModelStore
被清除时崩溃的问题。 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
方法中接收key
和Class
。
版本 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:common
是 lifecycle: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 更改
- 已弃用的
LifecycleActivity
和LifecycleFragment
现已移除 - 请使用FragmentActivity
、AppCompatActivity
或支持Fragment
。 - 已在
ViewModelProviders
和ViewModelStores
中添加了@NonNull
注释 ViewModelProviders
构造函数已弃用 - 请直接使用其静态方法ViewModelProviders.DefaultFactory
已弃用 - 请使用ViewModelProvider.AndroidViewModelFactory
- 已添加静态
ViewModelProvider.AndroidViewModelFactory.getInstance(Application)
方法,用于检索适合创建ViewModel
和AndroidViewModel
实例的静态Factory
。