Lifecycle
此表列出了 androidx.lifecycle
组中的所有 Artifact。
Artifact | 稳定版 | 发布候选版 | Beta 版 | Alpha 版 |
---|---|---|---|---|
lifecycle-* | 2.9.1 | - | - | - |
lifecycle-viewmodel-navigation3 | - | - | - | 1.0.0-alpha01 |
声明依赖项
要添加 Lifecycle 的依赖项,您必须将 Google Maven 代码库添加到您的项目。阅读 Google 的 Maven 代码库以获取更多信息。
在您的应用或模块的 build.gradle
文件中添加所需 Artifact 的依赖项
Kotlin
Groovy
dependencies { def lifecycle_version = "2.9.1" def arch_version = "2.2.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" // ViewModel utilities for Compose implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version" // LiveData implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version" // Lifecycles only (without ViewModel or LiveData) implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version" // Lifecycle utilities for Compose implementation "androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version" // Saved state module for ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version" // ViewModel integration with Navigation3 implementation "androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha01" // Annotation processor kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // alternately - if using Java8, use the following instead of lifecycle-compiler implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" // optional - helpers for implementing LifecycleOwner in a Service implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version" // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" // optional - ReactiveStreams support for LiveData implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version" // optional - Test helpers for LiveData testImplementation "androidx.arch.core:core-testing:$arch_version" // optional - Test helpers for Lifecycle runtime testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version" }
Kotlin
dependencies { val lifecycle_version = "2.9.1" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version") // ViewModel utilities for Compose implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version") // Lifecycle utilities for Compose implementation("androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // ViewModel integration with Navigation3 implementation("androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha01") // Annotation processor kapt("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation ("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
Java
Groovy
dependencies { def lifecycle_version = "2.9.1" def arch_version = "2.2.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version" // LiveData implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version" // Lifecycles only (without ViewModel or LiveData) implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version" // Saved state module for ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version" // Annotation processor annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // alternately - if using Java8, use the following instead of lifecycle-compiler implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" // optional - helpers for implementing LifecycleOwner in a Service implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version" // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" // optional - ReactiveStreams support for LiveData implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version" // optional - Test helpers for LiveData testImplementation "androidx.arch.core:core-testing:$arch_version" // optional - Test helpers for Lifecycle runtime testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version" }
Kotlin
dependencies { val lifecycle_version = "2.9.1" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // Annotation processor annotationProcessor("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
有关依赖项的更多信息,请参阅添加构建依赖项。
反馈
您的反馈有助于改进 Jetpack。如果您发现新问题或有改进此库的想法,请告诉我们。在创建新问题之前,请查看此库中的现有问题。您可以通过点击星形按钮为您支持的现有问题投票。
有关更多信息,请参阅问题跟踪器文档。
Lifecycle ViewModel Navigation3 版本 1.0.0
版本 1.0.0-alpha01
2025 年 5 月 23 日
androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha01
已发布。版本 1.0.0-alpha01 包含这些提交。
新功能
- Lifecycle ViewModel Navigation3 是一个与 Navigation3 一起构建的新库,旨在提供与
ViewModels
的集成。androidx.lifecycle:lifecycle-viewmodel-navigation3
Artifact 提供ViewModelStoreNavEntryDecorator
,它为每个NavEntry
的内容提供一个唯一的ViewModelStoreOwner
。它还提供rememberViewModelStoreNavEntryDecorator()
以确保装饰器被配置更改正确处理。
val viewModelDecorator = rememberViewModelStoreNavEntryDecorator()
NavDisplay(
…,
entryDecorators =
listOf(
rememberSceneSetupNavEntryDecorator(),
rememberSavedStateNavEntryDecorator(),
viewModelDecorator
)
)
版本 2.9
版本 2.9.1
2025 年 6 月 4 日
androidx.lifecycle:lifecycle-*:2.9.1
已发布。版本 2.9.1 包含这些提交。
错误修复
- 修复了
SavedStateHandle.remove(key)
未清除SavedStateHandle.getMutableStateFlow(key)
状态的问题。(d5f939, b/418746333)
版本 2.9.0
2025 年 5 月 7 日
androidx.lifecycle:lifecycle-*:2.9.0
已发布。版本 2.9.0 包含这些提交。
自 2.8.0 以来的重要更改
- 一个新的
androidx.lifecycle:lifecycle-viewmodel-testing
KMP Artifact 现已可用,它提供了一个ViewModelScenario
类,用于隔离测试ViewModels
,支持onCleared
和SavedStateHandle
,以及通过recreate()
测试进程死亡和重新创建。 - 将
getMutableStateFlow
添加到SavedStateHandle
以返回一个MutableStateFlow
。这个新函数是 key-exclusive 的,不能与getLiveData
一起使用。如果您尝试使用两者访问相同的状态,将会抛出异常。 CreationExtras
现在包括类似映射的运算符重载,以在 Kotlin 中实现惯用内容操作。它允许in
、+=
和+
与CreationExtras
一起使用。
KotlinX Serialization 支持
随着 SavedState
1.3.0
中添加的 KotlinX Serialization 支持,我们引入了saved
,一个惰性属性委托,以便轻松地将@Serializable
类存储在SavedStateHandle
中,并让这些类在进程死亡和重新创建后自动恢复。请注意,saved
委托是惰性的,在访问之前不会调用init
lambda 或将任何内容保存到SavedStateHandle
中。@Serializable data class Person(val firstName: String, val lastName: String) class MyViewModel(handle: SavedStateHandle) : ViewModel() { var person by handle.saved { Person("John", "Doe") } fun onPersonChanged(person: Person) { this.person = person } }
Kotlin Multiplatform
lifecycle-testing
模块现在与 KMP 兼容,包括TestLifecycleOwner
等 API。lifecycle-viewmodel-savedstate
模块现在与 KMP 兼容,包括SavedStateHandle
等 API。androidx.compose.ui.platform.LocalLifecycleOwner
现在在通用源集中可用。NewInstanceFactory
现在可在 JVM 桌面和 Android 目标上使用。
行为变更
Lifecycle.DESTROYED
状态是终结状态,任何尝试将Lifecycle
从此状态移动到任何其他状态的操作都将导致IllegalStateException
。SavedStateHandle
不再包含任何返回的Bundle
为空的SavedStateProvider.saveState()
。
版本 2.9.0-rc01
2025 年 4 月 23 日
androidx.lifecycle:lifecycle-*:2.9.0-rc01
已发布。版本 2.9.0-rc01 包含这些提交。
版本 2.9.0-beta01
2025 年 4 月 9 日
androidx.lifecycle:lifecycle-*:2.9.0-beta01
已发布。版本 2.9.0-beta01 包含这些提交。
API 更改
Lifecycle ViewModel Compose
现在使用与 Compose Runtime 1.7.1 及更高版本相同的 Kotlin Multiplatform 设置 --desktop
Artifact 现已移除,并添加了-jvmStubs
和-linuxx64Stubs
Artifact。这些目标均不打算使用,它们是帮助 Jetbrains Compose 工作的占位符。(I5cb14, b/406592090)
依赖项更新
- 此库现在面向 Kotlin 2.0 语言级别,并且需要 KGP 2.0.0 或更高版本。(Idb6b5)
Lifecycle ViewModel Compose
现在依赖于 Compose 1.7.8。(I5cb14, b/406592090)
版本 2.9.0-alpha13
2025 年 3 月 26 日
androidx.lifecycle:lifecycle-*:2.9.0-alpha13
已发布,无显著公共更改。版本 2.9.0-alpha13 包含这些提交。
版本 2.9.0-alpha12
2025 年 3 月 12 日
androidx.lifecycle:lifecycle-*:2.9.0-alpha12
已发布。版本 2.9.0-alpha12 包含这些提交。
API 更改
- 在所有支持的 KMP 平台上,为
ViewModelProvider.get
添加@MainThread
注解。(I7e8dd, b/397736115) - 将
SavedState*Delegates
重命名为SavedState*Delegate
。(I8589b, b/399629301)
版本 2.9.0-alpha11
2025 年 2 月 26 日
androidx.lifecycle:lifecycle-*:2.9.0-alpha11
已发布。版本 2.9.0-alpha11 包含这些提交。
API 更改
- 向
saved()
委托添加SavedStateConfig
参数(I39b3a)
版本 2.9.0-alpha10
2025 年 2 月 12 日
androidx.lifecycle:lifecycle-*:2.9.0-alpha10
已发布。版本 2.9.0-alpha10 包含这些提交。
API 更改
- 将
MutableStateSerializer
从lifecycle-viewmodel-compose
移动到savedstate-compose
。(I4f690, b/378895074)
外部贡献
- 为在组合中调用
Lifecycle::currentState
添加了一个新的 Lint 问题,建议改为使用currentStateAsalue().value
以确保生命周期状态的变化正确触发重新组合。感谢 Steven Schoen!(Iad484)
版本 2.9.0-alpha09
2025 年 1 月 29 日
androidx.lifecycle:lifecycle-*:2.9.0-alpha09
已发布。版本 2.9.0-alpha09 包含这些提交。
新功能
- 添加
MutableStateSerializer
以序列化androidx.compose.runtime.MutableState
。(Idfc48, b/378895074)
API 更改
- 将重载的
SavedStateHandle.saved()
委托函数替换为默认参数(Icd1c1) AbstractSavedStateViewModelFactory
已弃用,因为它会为每个ViewModel
创建一个SavedStateHandle
,导致不必要的开销。请改用带有CreationExtras.createSavedStateHandle
的ViewModelProvider.Factory
,以实现更高效的ViewModel
创建。(Ia920b, b/388590327)
版本 2.9.0-alpha08
2024 年 12 月 11 日
androidx.lifecycle:lifecycle-*:2.9.0-alpha08
已发布。版本 2.9.0-alpha08 包含这些提交。
新功能
- 添加
ViewModelScenario.recreate
以模拟系统进程死亡,从而重新创建正在测试的ViewModel
及所有相关组件。(Id6a69, b/381063087) - 现在可以通过
ViewOverlay
等视图的分离父级解析通过各自的findViewTree
API 检索到的LifecycleOwner
和ViewModelStoreOwner
实例。有关分离视图父级的更多信息,请参阅核心发布说明或ViewTree.setViewTreeDisjointParent
中的文档。(I800f4)
API 更改
- 使命名和包组织与
SavedStateRegistryOwnerDelegate
更加一致(I8c135, b/376026744)
错误修复
- 此库现在使用 JSpecify 空值注解,这些注解是类型用途的。Kotlin 开发者应使用以下编译器参数来强制执行正确用法:
-Xjspecify-annotations=strict
(从 Kotlin 编译器 2.1.0 版本开始,这是默认设置)。(Ie4340, b/326456246) - 记录
ViewModel.onCleared
清理序列。(I586c7, b/363984116)
版本 2.9.0-alpha07
2024 年 11 月 13 日
androidx.lifecycle:lifecycle-*:2.9.0-alpha07
已发布。版本 2.9.0-alpha07 包含这些提交。
Kotlin Multiplatform 兼容性
- Lifecycle
ViewModel SavedState
现在与 KMP 兼容。这允许您在通用代码中使用SavedStateHandle
。(Ib6394, b/334076622)
KotlinX Serialization 支持
随着 SavedState
1.3.0-alpha05
中添加的 KotlinX Serialization 支持,我们引入了saved
,一个惰性属性委托,以便轻松地将@Serializable
类存储在SavedStateHandle
中,并让这些类在进程死亡和重新创建后自动恢复。请注意,saved
委托是惰性的,在访问之前不会调用init
lambda 或将任何内容保存到SavedStateHandle
中。(I47a88, b/376026744)@Serializable data class Person(val firstName: String, val lastName: String) class MyViewModel(handle: SavedStateHandle) : ViewModel() { var person by handle.saved { Person("John", "Doe") } fun onPersonChanged(person: Person) { this.person = person } }
API 更改
- 将
getMutableStateFlow
添加到SavedStateHandle
以返回一个MutableStateFlow
。这个新函数是 key-exclusive 的,不能与getLiveData
一起使用。如果您尝试使用两者访问相同的状态,将会抛出异常。(I04a4f, b/375408415)
版本 2.9.0-alpha06
2024 年 10 月 30 日
androidx.lifecycle:lifecycle-*:2.9.0-alpha06
已发布。版本 2.9.0-alpha06 包含这些提交。
行为变更
Lifecycle.DESTROYED
状态是终结状态,任何尝试将Lifecycle
从此状态移动到任何其他状态的操作都将导致IllegalStateException
。(I116c4, b/370577987)SavedStateHandle
不再包含返回的Bundle
为空的SavedStateProvider.saveState()
。(I910b5, b/370577987)
错误修复
- 当
Lifecycle
处于DESTROYED
状态时,Lifecycle.eventFlow
现在会正确完成。(I293b2, b/374043130)
版本 2.9.0-alpha05
2024 年 10 月 16 日
androidx.lifecycle:lifecycle-*:2.9.0-alpha05
已发布,无显著更改。版本 2.9.0-alpha05 包含这些提交。
版本 2.9.0-alpha04
2024 年 10 月 2 日
androidx.lifecycle:lifecycle-*:2.9.0-alpha04
已发布。版本 2.9.0-alpha04 包含这些提交。
Kotlin Multiplatform
lifecycle-viewmodel-savedstate
模块现在已配置为 KMP 兼容,为将来在通用源集中提供SavedStateHandle
等 API 做准备。(I503ed, I48764, b/334076622)
版本 2.9.0-alpha03
2024 年 9 月 18 日
androidx.lifecycle:lifecycle-*:2.9.0-alpha03
已发布。版本 2.9.0-alpha03 包含这些提交。
错误修复
- 来自 Lifecycle
2.8.6
:NullSafeMutableLiveData
Lint 错误改进了对智能转换的支持,避免了误报。(85fed6, b/181042665)
依赖项更新
- 来自 Lifecycle
2.8.6
:Lifecycle Runtime Compose 现在依赖于 Compose Runtime1.7.1
- Lifecycle Runtime 现在依赖于 ProfileInstaller
1.4.0
版本 2.9.0-alpha02
2024 年 9 月 4 日
androidx.lifecycle:lifecycle-*:2.9.0-alpha02
已发布。版本 2.9.0-alpha02 包含这些提交。
错误修复
- 来自 Lifecycle
2.8.5
:更新了androidx.lifecycle.ReportFragment
ProGuard 规则以允许混淆。(ff898e1)
外部贡献
- 将
androidx.compose.ui.platform.LocalLifecycleOwner
移动到通用源集 (KMP)。感谢 JetBrains 的 Ivan Matkov 的贡献。(8cd5d03) - 来自 Lifecycle
2.8.5
:SavedStateHandle.saveable` 扩展委托现在支持可空值。感谢 Roman Kalukiewicz 的贡献。(0d78ea6)
版本 2.9.0-alpha01
2024 年 8 月 7 日
androidx.lifecycle:lifecycle-*:2.9.0-alpha01
已发布。版本 2.9.0-alpha01 包含这些提交。
Kotlin Multiplatform
lifecycle-testing
现在与 KMP 兼容。(Iea41e)- 添加了对
linuxArm64
Kotlin 多平台目标的支持(I139d3, b/338268719)
新功能
- 一个新的
androidx.lifecycle:lifecycle-viewmodel-testing
KMP Artifact 现已可用,它提供了一个ViewModelScenario
类,用于隔离测试 ViewModels,支持onCleared
(所有平台)和SavedStateHandle
(仅限 Android)。(337f68d, c9b3409, 9799a95c, b/264602919) - 使用
ViewModelProvider
创建ViewModel
现在是线程安全的;已删除@MainThread
注解。(Ifd978, b/237006831)
API 更改
- 添加
CreationExtras.Key()
工厂函数以简化匿名CreationExtras.Key
对象的创建。(I970ee) CreationExtras
现在包括类似映射的运算符重载,以在 Kotlin 中实现惯用内容操作。它允许in
、+=
和+
与CreationExtras
一起使用。(Ib4353)CreationExtras
现在实现equals
、hashCode
和toString
方法。(Ib4353)NewInstanceFactory
现在可在 JVM 桌面和 Android 目标上使用。(d3d0892)- 内联扩展属性,以便在 Kotlin 语言版本 2.0 中安全地公开底层 Application。(I39df2)
错误修复
- 删除了手动概述对新平台 API 的访问,因为在使用 AGP 7.3 或更高版本(例如 R8 版本 3.3)的 R8 以及使用 AGP 8.1 或更高版本(例如 D8 版本 8.1)的所有构建中,这都会通过 API 建模自动发生。建议不使用 AGP 的客户端更新到 D8 8.1 或更高版本。有关更多详细信息,请参阅本文。(If6b4c, b/345472586)
版本 2.8
版本 2.8.7
2024 年 10 月 30 日
androidx.lifecycle:lifecycle-*:2.8.7
已发布。版本 2.8.7 包含这些提交。
API 更改
androidx.compose.ui.platform.LocalLifecycleOwner
现在在通用源集 (KMP) 中可用。(6a3f5b3)lifecycle-runtime-compose
:desktop
Artifact 已移除,并添加了-jvmStubs
和-linuxx64Stubs
Artifact。这些目标均不打算使用,它们是帮助 Jetbrains Compose 工作的占位符。(6a3f5b3)
版本 2.8.6
2024 年 9 月 18 日
androidx.lifecycle:lifecycle-*:2.8.6
已发布。版本 2.8.6 包含这些提交。
错误修复
NullSafeMutableLiveData
Lint 错误改进了对智能转换的支持,避免了误报。(85fed6, b/181042665)
依赖项更新
- Lifecycle Runtime Compose 现在依赖于 Compose Runtime
1.7.1
版本 2.8.5
2024 年 9 月 4 日
androidx.lifecycle:lifecycle-*:2.8.5
已发布。版本 2.8.5 包含这些提交。
错误修复
- 更新了
androidx.lifecycle.ReportFragment
ProGuard 规则以允许混淆。(ff898e1)
外部贡献
SavedStateHandle.saveable
扩展委托现在支持可空值。感谢 Roman Kalukiewicz 的贡献。(0d78ea6)
版本 2.8.4
2024 年 7 月 24 日
androidx.lifecycle:lifecycle-*:2.8.4
已发布。版本 2.8.4 包含这些提交。
错误修复
LiveData.asFlow()
现在正确处理返回的 Flow 在接收到已设置在LiveData
上的值后立即完成的情况(例如,使用take(1)
时)。(I9c566)Lifecycle*Effect
完成现在是幂等的(即,如果onStopOrDispose
因 Lifecycle 停止而被调用,则除非 Lifecycle 再次返回到STARTED
状态,否则在处理时不会再次调用)。(I5f607, b/352364595)
版本 2.8.3
2024 年 7 月 1 日
androidx.lifecycle:lifecycle-*:2.8.3
已发布。版本 2.8.3 包含这些提交。
错误修复
- 修复了 Lifecycle 2.8 在使用代码缩减时与 Compose 1.6.0 及更低版本向后兼容性问题。(aosp/3133056, b/346808608)
版本 2.8.2
2024 年 6 月 12 日
androidx.lifecycle:lifecycle-*:2.8.2
已发布。版本 2.8.2 包含这些提交。
错误修复
- 修复了在使用 Lifecycle 2.8.X 与 Compose 1.6.X 或更早版本时出现
CompositionLocal LocalLifecycleOwner not present
错误的问题 - 您现在可以将 Lifecycle 2.8.2 与任何 Compose 版本一起使用,无需任何变通方法。(aosp/3105647, b/336842920) ViewModelProvider
在混合使用先前版本的compileOnly
Lifecycle 依赖项和 2.8+ 版本时将不再崩溃,解决了 LeakCanary 等库的问题。(I80383, b/341792251)
版本 2.8.1
2024 年 5 月 29 日
androidx.lifecycle:lifecycle-*:2.8.1
已发布。版本 2.8.1 包含这些提交。
错误修复
lifecycle-viewmodel-compose
现在仅对compose-runtime
具有公共依赖项,移除了对compose-ui
的公共依赖项。Android Artifact 保留其compose-ui
以实现兼容性。(aosp/3079334, b/339562627)- ViewModel 的
saveable
集成使用属性委托,现在使用类名作为自动生成键的一部分,避免了多个类使用相同的SavedStateHandle
时发生冲突。(aosp/3063463)
版本 2.8.0
2024 年 5 月 14 日
androidx.lifecycle:lifecycle-*:2.8.0
已发布。版本 2.8.0 包含这些提交。
自 2.7.0 以来的重要更改
LocalLifecycleOwner
已从 Compose UI 移至lifecycle-runtime-compose
,以便其基于 Compose 的辅助 API 可以在 Compose UI 之外使用。lifecycle-runtime-compose
Artifact 现在包含dropUnlessResumed
和dropUnlessStarted
API,允许您丢弃即使LifecycleOwner
已低于给定Lifecycle.State
之后发生的点击或其他事件。例如,这可以与 Navigation Compose 一起使用,以避免在屏幕过渡开始后处理点击事件:onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
ViewModel.viewModelScope
现在是一个可重写构造函数参数,允许您注入自己的调度器和SupervisorJob()
,或通过使用runTest
中可用的backgroundScope
来覆盖默认值。(I2817c, b/264598574)class MyViewModel( // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob() ) : ViewModel(viewModelScope) { // Use viewModelScope as before, without any code changes } // Allows overriding the viewModelScope in a test fun Test() = runTest { val viewModel = MyViewModel(backgroundScope) }
ViewModel
已用 Kotlin 重写,现在使用AutoClosable
而不是Closeable
。它现在支持使用key
添加AutoCloseable
对象,允许通过getCloseable()
检索它们。不带键调用
LifecycleStartEffect
和LifecycleResumeEffect
现在是错误,遵循与这些 API 镜像的DisposableEffect
API 相同的约定。弃用了
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
,推荐使用LiveData.toPublisher(lifecycleOwner)
。lifecycle-livedata-core-ktx
kotlin 扩展现在已移至lifecycle-livedata-core
模块。NullSafeMutableLiveData
已重构以避免许多误报。
Lifecycle Kotlin Multiplatform 兼容性
Lifecycle
、LifecycleOwner
、LifecycleObserver
、Lifecycle.State
、Lifecycle.Event
和 LifecycleRegistry
中的核心 Lifecycle API 现在以兼容 Kotlin Multiplatform 的 Artifact 形式发布。
受影响的 Artifact
lifecycle-common
将大多数 API 移动到common
,除了 Android 之外还支持 jvm 和 iOS。lifecycle-runtime
将大多数 API 移动到common
,除了 Android 之外还支持 jvm 和 iOS。lifecycle-runtime-ktx
现在为空,所有 API 都已移至lifecycle-runtime
。lifecycle-runtime-compose
将所有 API 移动到common
,并发布一个 Android Artifact,与androidx.compose
的多平台支持相匹配。
ViewModel Kotlin Multiplatform 兼容性
lifecycle-viewmodel
Artifact 和 ViewModel
、ViewModelStore
、ViewModelStoreOwner
和 ViewModelProvider
等 API 现在以兼容 Kotlin Multiplatform 的 Artifact 形式发布。
为了适应这一变化,ViewModelProvider
等方法接受 java.lang.Class<T>
的方法现在有一个接受 kotlin.reflect.KClass<T>
的等效方法。
Android 上的二进制兼容性已保持,但在比较 Android API 界面与通用 API 界面时,有一些值得注意的变化
ViewModelProvider
实例的构造现在通过ViewModelProvider.create()
方法完成,而不是直接调用其构造函数。ViewModelProvider.NewInstanceFactory
和ViewModelProvider.AndroidViewModelFactory
仅在 Android 上可用。- 建议自定义工厂从
ViewModelProvider.Factory
扩展,并使用接受CreationExtras
的create
方法,或者使用viewModelFactory
Kotlin DSL。
- 建议自定义工厂从
- 在非 JVM 平台上使用
ViewModelProvider
而不提供自定义工厂将导致UnsupportedOperationException
。在 JVM 平台上,通过在不提供自定义工厂的情况下使用无参数 ViewModel 构造函数来保持兼容性。 - 在
Dispatchers.Main
不可用的平台(例如 Linux)上,viewModelScope
将回退到EmptyCoroutineContext
。
受影响的 Artifact
lifecycle-viewmodel
将大多数 API 移动到common
,除了 Android 之外还支持 jvm 和 iOS。lifecycle-viewmodel-ktx
现在为空,所有 API 都已移至lifecycle-viewmodel
。lifecycle-viewmodel-compose
将所有 API 移动到common
,并发布一个 Android Artifact,与androidx.compose
的多平台支持相匹配。
行为变更
- 如果已添加具有相同
clazz: KClass<VM : ViewModel>
的initializer
,则InitializerViewModelFactory
(包括viewModelFactory
构建器函数)现在将抛出IllegalArgumentException
。(Ic3a36)
已知问题
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
类的 Baseline Profile 未正确打包的问题。这些现在已打包到lifecycle-runtime
AAR 中。(aosp/3038274, b/322382422) - 修复了 ViewModel 附带的
AutoCloseable
实例清除顺序中无意中的更改 - 恢复了之前的addCloseable(String, AutoCloseable)
,然后addClosable(AutoCloseable)
,然后onCleared()
的顺序。(aosp/3041632) - 改进了适用于原生和 JVM 桌面环境的
viewModelScope
的默认创建行为。(aosp/3039221)
外部贡献
- 感谢 Victor Kropp 改进了 JVM 桌面版的主线程检查。(aosp/3037116)
版本 2.8.0-beta01
2024 年 4 月 17 日
androidx.lifecycle:lifecycle-*:2.8.0-beta01
已发布。版本 2.8.0-beta01 包含这些提交。
新功能
lifecycle-runtime-compose
Artifact 现在与 Kotlin Multiplatform 兼容,将其代码移至common
并发布一个 Android Artifact,与androidx.compose
的多平台支持相匹配。(If7a71, I4f4a0, b/331769623)
版本 2.8.0-alpha04
2024 年 4 月 3 日
androidx.lifecycle:lifecycle-*:2.8.0-alpha04
已发布。版本 2.8.0-alpha04 包含这些提交。
新功能
lifecycle-viewmodel-compose
Artifact 现在与 Kotlin Multiplatform 兼容,将其代码移至common
并发布一个 Android Artifact,与androidx.compose
的多平台支持相匹配。为了适应此更改,可组合的viewModel
方法现在除了接受java.lang.Class
之外,还接受KClass
。(b/330323282)
错误修复
依赖项更新
lifecycle-viewmodel-compose
Artifact 现在依赖于 Compose 1.6.0。- Lifecycle 现在依赖于 Profile Installer 1.3.1。
版本 2.8.0-alpha03
2024 年 3 月 20 日
androidx.lifecycle:lifecycle-*:2.8.0-alpha03
已发布。版本 2.8.0-alpha03 包含这些提交。
新功能
ViewModel.viewModelScope
现在是一个可重写构造函数参数,允许您注入自己的调度器和SupervisorJob()
,或通过使用runTest
中可用的backgroundScope
来覆盖默认值。(I2817c, b/264598574)class MyViewModel( // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob() ) : ViewModel(viewModelScope) { // Use viewModelScope as before, without any code changes } // Allows overriding the viewModelScope in a test fun Test() = runTest { val viewModel = MyViewModel(backgroundScope) }
Kotlin Multiplatform 兼容性
lifecycle-viewmodel
Artifact 和 ViewModel
、ViewModelStore
、ViewModelStoreOwner
和 ViewModelProvider
等 API 现在以兼容 Kotlin Multiplatform 的 Artifact 形式发布。(b/214568825)
为了适应这一变化,ViewModelProvider
等方法接受 java.lang.Class<T>
的方法现在有一个接受 kotlin.reflect.KClass<T>
的等效方法。
Android 上的二进制兼容性已保持,但在比较 Android API 界面与通用 API 界面时,有一些值得注意的变化
ViewModelProvider
实例的构造现在通过ViewModelProvider.create()
方法完成,而不是直接调用其构造函数。ViewModelProvider.NewInstanceFactory
和ViewModelProvider.AndroidViewModelFactory
仅在 Android 上可用。- 建议自定义工厂从
ViewModelProvider.Factory
扩展,并使用接受CreationExtras
的create
方法,或者使用viewModelFactory
Kotlin DSL。
- 建议自定义工厂从
- 在非 JVM 平台上使用
ViewModelProvider
而不提供自定义工厂将导致UnsupportedOperationException
。在 JVM 平台上,通过在不提供自定义工厂的情况下使用无参数 ViewModel 构造函数来保持兼容性。 - 在
Dispatchers.Main
不可用的平台(例如 Linux)上,viewModelScope
将回退到EmptyCoroutineContext
。
行为变更
- 如果已添加具有相同
clazz: KClass<VM : ViewModel>
的initializer
,则InitializerViewModelFactory
(包括viewModelFactory
构建器函数)现在将抛出IllegalArgumentException
。(Ic3a36)
错误修复
ViewModel.getCloseable
现在处理重复的键:如果key
已关联AutoCloseable
资源,则旧资源将被替换并立即关闭。(Ibeb67)- 访问
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 Multiplatform 兼容性
Lifecycle
、LifecycleOwner
、LifecycleObserver
、Lifecycle.State
、Lifecycle.Event
和LifecycleRegistry
中的核心 Lifecycle API 现在以兼容 Kotlin Multiplatform 的 Artifact 形式发布。(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 Multiplatform。(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 框架丢失了类型信息,自定义 Parcelables 数组需要额外的工作(手动创建正确类型的类型化数组),并且get
、getLiveData
和getStateFlow
的文档现在明确指出了此限制。 - 与
LifecycleObserver
关联的 proguard keep 规则已移除。这意味着希望通过反射使用 API 的混淆代码(例如使用早已弃用的@OnLifecycleEvent
注解)需要为其特定用例提供自己的 keep 规则。
生命周期事件可观察性
- 作为使用
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.State
现在可以通过Lifecycle.currentStateFlow
属性观察,该属性返回一个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 框架丢失了类型信息,自定义 Parcelables 数组需要额外的工作(手动创建正确类型的类型化数组),并且get
、getLiveData
和getStateFlow
的文档现在明确指出了此限制。(I0b55a)
版本 2.7.0-rc01
2023 年 11 月 15 日
androidx.lifecycle:lifecycle-*:2.7.0-rc01
已发布。版本 2.7.0-rc01 包含这些提交。
错误修复
- 如果
LifecycleOwner
发生更改,LifecycleStartEffect
和LifecycleResumeEffect
现在会正确地处理并重新创建效果块。(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
已经收到对onCleared()
的调用,则ViewModel
的addCloseable()
现在会立即关闭Closeable
。(I4712e, b/280294730)
错误修复
- 来自 Lifecycle
2.6.2
:修复了SavedStateHandle
在进程死亡后无法正确恢复的问题,如果状态已恢复,调用了save()
但未实际将状态保存到父SavedStateRegistry
中,然后状态再次恢复。这修复了rememberSaveable
和 Navigation Compose 的NavHost
之间的交互。(aosp/2729289)
版本 2.7.0-alpha01
2023 年 7 月 26 日
androidx.lifecycle:lifecycle-*:2.7.0-alpha01
已发布。版本 2.7.0-alpha01 包含这些提交。
API 更改
Lifecycle.State
现在可以通过Lifecycle.currentStateFlow
在 Compose 中可观察,该属性返回一个StateFlow
,其中value
是当前的Lifecycle.State
。(Ib212d, b/209684871)Lifecycle.Event
现在可以通过Lifecycle.asFlow().
作为Flow
进行观察。(If2c0f, b/176311030)LifecycleResumeEffect
API 已添加,用于根据Lifecycle.Event.ON_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
已设置值的情况下,设置返回的LiveData
的value
。这不会改变观察行为 - 来自源LiveData
的更新值仍只会在您开始观察distinctUntilChanged()
返回的LiveData
后才应用。(Ib482f)- 与
LifecycleObserver
相关的 ProGuard 保留规则已移除。这意味着,希望通过反射使用 API 的 ProGuard 代码需要为其特定用例提供自己的保留规则。(Ia12fd)
版本 2.6
版本 2.6.2
2023 年 9 月 6 日
androidx.lifecycle:lifecycle-*:2.6.2
已发布。版本 2.6.2 包含以下提交。
错误修复
- 修复了
SavedStateHandle
在进程终止后无法正确恢复的问题,如果状态已恢复,在父级SavedStateRegistry
中调用save()
但未实际保存状态,然后再次恢复状态。这修复了rememberSaveable
和 Navigation Compose 的NavHost
之间的交互。(aosp/2729289)
版本 2.6.1
2023 年 3 月 22 日
androidx.lifecycle:lifecycle-*:2.6.1
已发布。版本 2.6.1 包含以下提交。
依赖项更新
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()
,它从流中收集并以生命周期感知的方式将其最新值表示为 Compose State。 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
已设置值的情况下,设置返回的LiveData
的value
。这不会改变观察行为 - 来自源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)LifecycleOwner
上提供lifecycleScope
字段的 Kotlin 扩展已从lifecycle-runtime-ktx
移至lifecycle-common
工件。(I41d78、b/240298691)Lifecycle
上提供coroutineScope
字段的 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 代码必须现在使用 Kotlin 扩展方法语法,该语法以前仅在使用lifecycle-livedata-ktx
时可用。当使用 Java 编程语言时,接受androidx.arch.core.util.Function
方法的这些方法版本已被弃用,并替换为接受 KotlinFunction1
的版本。此更改保持二进制兼容性。(I8e14f)ViewTreeViewModelStoreOwner
现在使用 Kotlin 编写。这对于用 Kotlin 编写的类是源不兼容的更改 - 您现在必须直接导入并使用View
上的 Kotlin 扩展方法androidx.lifecycle.setViewTreeViewModelStoreOwner
和androidx.lifecycle.findViewTreeViewModelStoreOwner
来设置和查找以前设置的所有者。这与二进制兼容,并且对于用 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
上的 Kotlin 扩展方法androidx.lifecycle.setViewTreeLifecycleOwner
和androidx.lifecycle.findViewTreeLifecycleOwner
来设置和查找以前设置的所有者。这替换了之前在lifecycle-runtime-ktx
中的 Kotlin 扩展。这与二进制兼容,并且对于用 Java 编程语言实现的仍保持源兼容。(I8a77a、I5234e、b/240298691)LiveDataReactiveStreams
现在使用 Kotlin 编写。以前在lifecycle-reactivestreams-ktx
中的 Kotlin 扩展已移至lifecycle-reactivestreams
模块,并成为用 Kotlin 编写的代码的主要接口。这对于用 Kotlin 编写的代码是源不兼容的更改,如果您之前没有使用 Kotlin 扩展方法 API 的话。(I2b1b9、I95d22、b/240298691)DefaultLifecycleObserver
、LifecycleEventObserver
、Lifecycle
、LifecycleRegistry
、LifecycleObserver
和ViewModelStore
现在使用 Kotlin 编写。(Iadffd、I60034、I8c52c、I9593d、I01fe1、I59a23、b/240298691)
错误修复
SavedStateHandle
在使用不正确的类类型调用get()
时不再会因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
:使用 Stateful 构造函数和Lifecycle
2.4+ 时,AndroidViewModelFactory
的自定义实现现在会正确调用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 State。当生命周期至少处于某个Lifecycle.State
时,流被收集,新发出的值被设置为 State 的值。当生命周期低于该Lifecycle.State
时,流收集停止,State 的值不再更新。(I1856e、b/230557927)
版本 2.5
版本 2.5.1
2022 年 7 月 27 日
androidx.lifecycle:lifecycle-*:2.5.1
已发布。版本 2.5.1 包含以下提交。
错误修复
- 使用 Stateful
AndroidViewModelFactory
构造函数和 Lifecycle 2.4+ 时,AndroidViewModelFactory
的自定义实现现在会正确调用create(modelClass)
函数。(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 CreationExtras - 编写自定义
ViewModelProvider.Factory
时,不再需要扩展AndroidViewModelFactory
或AbstractSavedStateViewModelFactory
才能访问Application
或SavedStateHandle
。相反,这些字段通过新的create
重载create(Class<T>, CreationExtras)
作为CreationExtras
提供给每个ViewModelProvider.Factory
子类。当分别使用 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,它允许由 `ViewModel` 的SavedStateHandle
支持的类似rememberSaveable
的行为。class ListScreenViewModel(handle: SavedStateHandle): ViewModel() { // This value survives both configuration changes and process death and recreation val editMode by handle.saveable { mutableStateOf(false) } }
添加了
addCloseable()
API 和新的构造函数重载,允许您向ViewModel
添加一个或多个Closeable
对象,这些对象将在ViewModel
清理时关闭,而无需在onCleared()
中进行任何手动操作。例如,要创建一个可以注入到 ViewModel 中但通过测试控制的协程作用域,您可以创建一个实现
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 包含以下提交。
错误修复
- 当混合使用旧版本的 compileOnly Lifecycle 依赖项和 2.5+ 版本时,
ViewModelProvider
不再崩溃。(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
会在使用多个返回堆栈时导致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 更改
- 修复了 Lifecycle 2.3 和更新版本 Lifecycle 在 Java 中的兼容性问题。(I52c8a、b/219545060)
错误修复
SavedStateViewFactory
现在支持使用CreationExtras
,即使它已用SavedStateRegistryOwner
初始化。如果提供了额外项,则忽略初始化的参数。(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,它返回一个 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
,它允许您添加 lambda 来处理特定的ViewModel
类,并使用CreationExtras
作为主要数据源。(If58fc、b/216687549)lifecycle-viewmodel-compose
现在提供了一个viewModel()
API,它接受一个 lambda 工厂用于创建ViewModel
实例,而无需创建自定义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) - 您现在可以使用
AndroidViewModelFactory
通过CreationExtras
创建视图模型,而无需设置应用程序。(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
,而无需依赖于严格的 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 扩展函数,仅为需要它的一个 ViewModel 构造 SavedStateHandle
。(Ia6654、b/188541057)
可以通过覆盖您的 ComponentActivity
或 Fragment
中的 getDefaultViewModelCreationExtras()
来提供自定义 CreationExtras
,从而使它们可以作为内置的辅助注入形式供您的自定义 ViewModelProvider.Factory
使用。当直接与 ViewModelProvider
一起使用或使用 by viewModels()
和 by activityViewModels()
Kotlin 属性扩展时,这些额外项将自动提供给您的自定义 Factory。(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
方法不再允许可空泛型。
- 源破坏性更改:
- 新的协程 API 已添加到
androidx.lifecycle:lifecycle-runtime-ktx
Lifecycle.repeatOnLifecycle
:当 Lifecycle 至少处于某个特定状态时,在协程中执行一段代码的 API。当生命周期进入或退出目标状态时,该代码块将取消并重新启动;Flow.flowWithLifecycle
:当生命周期至少处于某个特定状态时,从上游 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 检查,用于检测repeateOnLifecycle
在onStart()
或onResume()
中使用不正确的情况。(706078、b/187887400)
API 更改
LifecycleOwner.addRepeatingJob
API 已移除,取而代之的是Lifecycle.repeatOnLifecycle
,它遵循结构化并发且更易于理解。(I4a3a8)- 将
ProcessLifecycleInitializer
设为 public,以便其他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,该 API 使用Lifecycle.repeatOnLifecycle
API 在生命周期至少处于某个特定状态时从上游 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
现在具有可与CompositionLocalProvider
一起使用的provides
函数,取代了asProvidableCompositionLocal()
API。(I45d24)
Lifecycle-Viewmodel-Compose 版本 1.0.0-alpha01
2021 年 2 月 10 日
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01
已发布。版本 1.0.0-alpha01 包含以下提交。
新功能
viewModel()
可组合函数和LocalViewModelStoreOwner
已从androidx.compose.ui.viewinterop
移至此工件的androidx.lifecycle.viewmodel.compose
包中。(I7a374)
版本 2.3.1
Lifecycle 版本 2.3.1
2021 年 3 月 24 日
androidx.lifecycle:lifecycle-*:2.3.1
已发布。版本 2.3.1 包含以下提交。
错误修复
NonNullableMutableLiveData
lint 规则现在可以正确区分具有不同可空性的字段变量。(b/169249668)
版本 2.3.0
版本 2.3.0
2021 年 2 月 10 日
androidx.lifecycle:lifecycle-*:2.3.0
已发布。版本 2.3.0 包含以下提交。
自 2.2.0 以来发生的主要变化
SavedStateHandle
对非 Parcelable 类的支持:SavedStateHandle
现在支持延迟序列化,允许您为给定键调用setSavedStateProvider()
,提供一个SavedStateProvider
,当SavedStateHandle
要求保存其状态时,它将获得saveState()
的回调。请参阅保存非 Parcelable 类。- 生命周期行为强制执行:
- LifecycleRegistry 现在强制将
DESTROYED
作为终端状态。 LifecycleRegistry
现在验证其方法是否在主线程上调用。对于活动、片段等的生命周期,这始终是一个要求。从非主线程添加观察者会导致运行时难以捕获的崩溃。对于您自己组件拥有的LifecycleRegistry
对象,您可以通过使用LifecycleRegistry.createUnsafe(...)
显式选择退出检查,但随后您必须确保在从不同线程访问此LifecycleRegistry
时存在适当的同步。
- LifecycleRegistry 现在强制将
- 生命周期状态和事件助手:添加了
Lifecycle.Event
的静态辅助方法downFrom(State)
、downTo(State)
、upFrom(State)
、upTo(State)
,用于根据State
和转换方向生成Event
。添加了getTargetState()
方法,该方法提供Event
之后生命周期将直接转换到的State
。 withStateAtLeast
:添加了Lifecycle.withStateAtLeast
API,该 API 会等待生命周期状态并在状态更改时同步运行非挂起代码块,然后以结果恢复。这些 API 与现有的when*
方法不同,因为它们不允许运行挂起代码,并且不使用自定义调度程序。(aosp/1326081)ViewTree
API:新的ViewTreeLifecycleOwner.get(View)
和ViewTreeViewModelStoreOwner.get(View)
API 允许您在给定View
实例的情况下分别检索包含的LifecycleOwner
和ViewModelStoreOwner
。您必须升级到 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()
方法在状态保存前后现在保持一致 - 它现在包含以前与setSavedStateProvider()
一起使用的键,以及与set()
和getLiveData()
一起使用的键。(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 包含以下提交。
新功能
- 添加了
Lifecycle.Event
的静态辅助方法downFrom(State)
、downTo(State)
、upFrom(State)
、upTo(State)
,用于根据State
和转换方向生成Event
。添加了getTargetState()
方法,该方法提供Event
之后生命周期将直接转换到的State
。(I00887) - 添加了
Lifecycle.withStateAtLeast
API,该 API 会等待生命周期状态并在状态更改时同步运行非挂起代码块,然后以结果恢复。这些 API 与现有的when*
方法不同,因为它们不允许运行挂起代码,并且不使用自定义调度程序。(aosp/1326081)
行为变更
- LifecycleRegistry 现在强制将
DESTROYED
作为终端状态。(I00887) LifecycleRegistry
现在验证其方法是否在主线程上调用。对于活动、片段等的生命周期,这始终是一个要求。从非主线程添加观察者会导致运行时难以捕获的崩溃。对于您自己组件拥有的LifecycleRegistry
对象,您可以通过使用LifecycleRegistry.createUnsafe(...)
显式选择退出检查,但随后您必须确保在从不同线程访问此LifecycleRegistry
时存在适当的同步。(Ie7280、b/137392809)
错误修复
- 修复了
NullSafeMutableLiveData
中的崩溃问题。(b/159987480) - 修复了
lifecycle-livedata-core-ktx
捆绑的 Lint 检查(特别是NullSafeMutableLiveData
)的ObsoleteLintCustomCheck
问题。(b/158699265)
版本 2.3.0-alpha05
2020 年 6 月 24 日
androidx.lifecycle:lifecycle-*:2.3.0-alpha05
已发布。版本 2.3.0-alpha05 包含以下提交。
错误修复
LiveData
现在更好地处理重入情况,避免对onActive()
或onInactive()
进行重复调用。(b/157840298)- 修复了当使用 Android Studio 4.1 Canary 6 或更高版本时 Lint 检查不运行的问题。(aosp/1331903)
版本 2.3.0-alpha04
2020 年 6 月 10 日
androidx.lifecycle:lifecycle-*:2.3.0-alpha04
已发布。版本 2.3.0-alpha04 包含以下提交。
错误修复
- 修复了
NonNullableMutableLiveData
Lint 检查中的崩溃问题。(b/157294666) NonNullableMutableLiveData
Lint 检查现在覆盖了更多情况,即带有非空类型参数的MutableLiveData
被设置了null
值。(b/156002218)
版本 2.3.0-alpha03
2020 年 5 月 20 日
androidx.lifecycle:lifecycle-*:2.3.0-alpha03
已发布。版本 2.3.0-alpha03 包含以下提交。
新功能
SavedStateHandle
现在支持延迟序列化,允许您为给定键调用setSavedStateProvider()
,提供一个SavedStateProvider
,当SavedStateHandle
要求保存其状态时,它将获得saveState()
的回调。(b/155106862)- 一个新的
ViewTreeViewModelStoreOwner.get(View)
API 允许您在给定View
实例的情况下检索包含的ViewModelStoreOwner
。您必须升级到 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
现在允许您向其构造函数传递一个 nullApplication
,以更好地支持一个应用程序不易获取且不需要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
工件可用,它提供一个实现LifecycleOwner
并提供线程安全可变Lifecycle
的TestLifecycleOwner
。(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()
已被弃用。在使用 Fragment1.2.0
时,您可以将Fragment
或FragmentActivity
传递给新的ViewModelProvider(ViewModelStoreOwner)
构造函数以实现相同的功能。lifecycle-extensions
工件弃用:随着上述ViewModelProviders.of()
的弃用,此版本标志着lifecycle-extensions
中最后一个 API 的弃用,此工件现在应被视为已完全弃用。我们强烈建议您依赖于所需的特定 Lifecycle 工件(例如,如果您使用LifecycleService
则依赖lifecycle-service
,如果您使用ProcessLifecycleOwner
则依赖lifecycle-process
),而不是lifecycle-extensions
,因为lifecycle-extensions
将不会有未来的2.3.0
版本。- Gradle 增量注解处理器:Lifecycle 的注解处理器默认是增量的。如果您的应用是用 Java 8 编程语言编写的,您可以使用
DefautLifecycleObserver
;如果它用 Java 7 编程语言编写的,您可以使用LifecycleEventObserver
。
版本 2.2.0-rc03
2019 年 12 月 4 日
androidx.lifecycle:lifecycle-*:2.2.0-rc03
已发布。版本 2.2.0-rc03 包含这些提交。
Bug 修复
- 修复了当模拟的
ViewModel
存储在ViewModelStore
中并随后使用默认工厂查询时发生的故障。 - 修复了
launchWhenCreated
和类似方法中Dispatchers.Main.immediate
的用法,使其在相应的生命周期事件期间同步调用。(aosp/1156203)
外部贡献
- 感谢 Anders Järleberg 贡献此修复!(aosp/1156203)
- 感谢来自 Jetbrains 的 Vsevolod Tolstopyatov 评审内联执行的实现。
依赖项变更
- Lifecycle Extensions 现在依赖于 Fragment
1.2.0-rc03
。
版本 2.2.0-rc02
2019 年 11 月 7 日
androidx.lifecycle:lifecycle-*:2.2.0-rc02
已发布。版本 2.2.0-rc02 包含这些提交。
Bug 修复
- 修复了库的 proguard 设置中的一个错误,该错误会影响运行 API 28+ 的设备(如果目标 API 低于 29)。(b/142778206)
版本 2.2.0-rc01
2019 年 10 月 23 日
androidx.lifecycle:lifecycle-*:2.2.0-rc01
已发布。版本 2.2.0-rc01 包含这些提交。
Bug 修复
- 修复了一个问题,即
launchWhenCreated
和相关方法由于使用了Dispatchers.Main
而不是Dispatchers.Main.immediate
,导致比关联的生命周期方法晚一帧运行。(aosp/1145596)
外部贡献
- 感谢 Nicklas Ansman 贡献此修复!(aosp/1145596)
版本 2.2.0-beta01
2019 年 10 月 9 日
androidx.lifecycle:lifecycle-*:2.2.0-beta01
已发布。版本 2.2.0-beta01 包含这些提交。
Bug 修复
- 修复了 Lifecycle 2.2.0-alpha05 中引入的回归问题,该问题导致在 Android 10 设备上
ProcessLifecycleOwner
和 activity 的LifecycleOwner
转换为 Started 和 Resumed 的顺序出现问题。(aosp/1128132) - 修复了 Lifecycle
2.2.0-alpha05
中引入的回归问题,该问题在使用lifecycle-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 包含这些提交。
Bug 修复
- 修复了协程 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
构建器添加了一个新的重载,该重载接收类型为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
类的构造函数中接收,并且 Fragments 和 AppCompatActivity 默认提供的工厂会自动注入SavedStateHandle
。 - 新增了 AbstractSavedStateViewModelFactory。它允许您为
ViewModel
创建自定义工厂,并使其能够访问SavedStateHandle
。
ViewModel-Savedstate 版本 1.0.0-rc03
2019 年 12 月 4 日
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03
已发布。版本 1.0.0-rc03 包含这些提交。
依赖项变更
- Lifecycle ViewModel SavedState 现在依赖于 Lifecycle
2.2.0-rc03
。
Viewmodel-Savedstate 版本 1.0.0-rc02
2019 年 11 月 7 日
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc02
已发布。版本 1.0.0-rc02 包含这些提交。
依赖项变更
- 现在依赖于 lifecycle
2.2.0-rc02
。
ViewModel-SavedState 版本 1.0.0-rc01
2019 年 10 月 23 日
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01
已发布,与 1.0.0-beta01
相比没有变化。版本 1.0.0-rc01 包含这些提交。
ViewModel-Savedstate 版本 1.0.0-beta01
2019 年 10 月 9 日
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01
已发布。版本 1.0.0-beta01 包含这些提交。
Bug 修复
- 修复了一个问题,即首次在
Activity.onActivityResult()
中访问 SavedState ViewModel 会导致IllegalStateException
。(b/139093676) - 修复了使用
AbstractSavedStateViewModelFactory
时的IllegalStateException
。(b/141225984)
ViewModel-SavedState 版本 1.0.0-alpha05
2019 年 9 月 18 日
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha05
已发布。版本 1.0.0-alpha05 包含这些提交。
API 变更
SavedStateViewModelFactory
不再继承AbstractSavedStateViewModelFactory
,并且SavedStateHandle
仅为请求它的 ViewModel 创建 (aosp/1113593)
ViewModel-SavedState 版本 1.0.0-alpha03
2019 年 8 月 7 日
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03
已发布。此版本中包含的提交可以在此处找到。
重大变更
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
,在 ViewModels 中添加了协程支持。
版本 2.1.0
2019 年 9 月 5 日
androidx.lifecycle:lifecycle-*:2.1.0
已发布。此版本中包含的提交可以在此处找到。
版本 2.1.0-rc01
2019 年 7 月 2 日
androidx.lifecycle:*:2.1.0-rc01
已发布,与 androidx.lifecycle:*:2.1.0-beta01
相比没有变化。此版本中包含的提交可以在此处找到。
版本 2.1.0-beta01
2019 年 5 月 7 日
androidx.lifecycle:*:2.1.0-beta01
已发布。此版本中包含的提交可以在此处找到。
新功能
- Lifecycles 已升级到 Beta 版:先前 Alpha 版中引入的 API,例如用于转换和观察的
liveData
扩展函数、通过属性委托初始化的ViewModel
等已稳定,并且不会再更改。
版本 2.1.0-alpha04
2019 年 4 月 3 日
androidx.lifecycle:*:2.1.0-alpha04
已发布。此版本中包含的提交可以在此处找到。
API 变更
- 重大变更:
by viewModels()
和by activityViewModels()
背后的底层 API 已更改为直接支持ViewModelStore
,而不仅仅是ViewModelStoreOwner
。(aosp/932932)
版本 2.1.0-alpha03
2019 年 3 月 13 日
androidx.lifecycle:*:2.1.0-alpha03
已发布。此版本中包含的完整提交列表可以在此处找到。
API 变更
ViewModelProvider.KeyedFactory
已被移除。除了ViewModelProvider.Factory
之外的第二个接口与 Kotlin 中by viewmodels {}
等属性委托等新功能配合不佳。(aosp/914133)
版本 2.1.0-alpha02
2019 年 1 月 30 日
androidx.lifecycle 2.1.0-alpha02
已发布。
API 变更
LifecycleRegistry
现在包含一个setCurrentState()
方法,它取代了现在已弃用的setState()
方法。(aosp/880715)
Bug 修复
- 修复了一个问题,即当包含的
ViewModelStore
被清除时,模拟的ViewModel
实例会崩溃。b/122273087
版本 2.1.0-alpha01
2018 年 12 月 17 日
androidx.lifecycle 2.1.0-alpha01
已发布。
新功能
- 添加了
LifecycleEventObserver
,用于需要生命周期事件流的情况。它是一个公共 API,而不是一个隐藏的GenericLifecycleObserver
类。 - 为
LiveData.observe
方法和Transformations.*
方法添加了 ktx 扩展。 - 添加了
Transformations.distinctUntilChanged
方法。它会创建一个新的LiveData
对象,该对象在源 LiveData 值发生更改之前不会发出值。 - ViewModels 中的协程支持:添加了扩展属性
ViewModel.viewModelScope
。 - 添加了
ViewModelProvider.KeyedFactory
,这是一个 ViewModel 工厂,其create
方法接收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
。 @NonNull
注解已添加到ViewModelProviders
和ViewModelStores
。ViewModelProviders
构造函数已被弃用 - 请直接使用其静态方法ViewModelProviders.DefaultFactory
已被弃用 - 请使用ViewModelProvider.AndroidViewModelFactory
- 已添加静态方法
ViewModelProvider.AndroidViewModelFactory.getInstance(Application)
,用于检索适合创建ViewModel
和AndroidViewModel
实例的静态Factory
。