生命周期
此表列出了androidx.lifecycle
组中的所有构件。
构件 | 稳定版 | 候选版 | 测试版 | Alpha 版 |
---|---|---|---|---|
lifecycle-* | 2.8.7 | - | - | 2.9.0-alpha07 |
lifecycle-viewmodel-compose | 2.8.7 | - | - | 2.9.0-alpha07 |
声明依赖项
要添加对生命周期的依赖项,必须将 Google Maven 存储库添加到您的项目中。阅读Google 的 Maven 存储库以了解更多信息。
在应用或模块的build.gradle
文件中添加所需构件的依赖项
Kotlin
Groovy
dependencies { def lifecycle_version = "2.8.7" def arch_version = "2.2.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" // ViewModel utilities for Compose implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version" // LiveData implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version" // Lifecycles only (without ViewModel or LiveData) implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version" // Lifecycle utilities for Compose implementation "androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version" // Saved state module for ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version" // Annotation processor kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // alternately - if using Java8, use the following instead of lifecycle-compiler implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" // optional - helpers for implementing LifecycleOwner in a Service implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version" // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" // optional - ReactiveStreams support for LiveData implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version" // optional - Test helpers for LiveData testImplementation "androidx.arch.core:core-testing:$arch_version" // optional - Test helpers for Lifecycle runtime testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version" }
Kotlin
dependencies { val lifecycle_version = "2.8.7" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version") // ViewModel utilities for Compose implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version") // Lifecycle utilities for Compose implementation("androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // Annotation processor kapt("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation ("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
Java
Groovy
dependencies { def lifecycle_version = "2.8.7" def arch_version = "2.2.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version" // LiveData implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version" // Lifecycles only (without ViewModel or LiveData) implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version" // Saved state module for ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version" // Annotation processor annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // alternately - if using Java8, use the following instead of lifecycle-compiler implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" // optional - helpers for implementing LifecycleOwner in a Service implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version" // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" // optional - ReactiveStreams support for LiveData implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version" // optional - Test helpers for LiveData testImplementation "androidx.arch.core:core-testing:$arch_version" // optional - Test helpers for Lifecycle runtime testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version" }
Kotlin
dependencies { val lifecycle_version = "2.8.7" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // Annotation processor annotationProcessor("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
有关依赖项的更多信息,请参阅添加构建依赖项。
反馈
您的反馈有助于改进 Jetpack。如果您发现新的问题或有改进此库的想法,请告知我们。在创建新问题之前,请查看此库中现有问题。您可以点击星号按钮为现有问题投票。
查看问题跟踪器文档以获取更多信息。
版本 2.9
版本 2.9.0-alpha07
2024 年 11 月 13 日
已发布androidx.lifecycle:lifecycle-*:2.9.0-alpha07
。版本 2.9.0-alpha07 包含这些提交。
Kotlin 多平台兼容性
- Lifecycle
ViewModel SavedState
现在兼容 KMP。这允许您在公共代码中使用SavedStateHandle
。(Ib6394,b/334076622)
KotlinX 序列化支持
随着在SavedState
1.3.0-alpha05
中添加了 KotlinX 序列化支持,我们引入了saved
(一个惰性属性委托),以便轻松地在SavedStateHandle
中存储@Serializable
类,并使这些类在进程死亡和重新创建时自动恢复。请注意,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 变更
- 向
SavedStateHandle
添加getMutableStateFlow
以返回MutableStateFlow
。此新函数是键独占的,不能与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.eventFlow
现在在Lifecycle
为DESTROYED
时正确完成。(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 多平台
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 多平台
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 的手动访问概述,因为在使用 AGP 7.3 或更高版本(例如 R8 版本 3.3)时,这将通过 API 建模自动发生,并且在使用 AGP 8.1 或更高版本(例如 D8 版本 8.1)时,对所有构建都适用。建议不使用 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
工件,并添加了-jvmStubs
和-linuxx64Stubs
工件。这些目标都不打算使用,它们是帮助 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()
现在可以正确处理在接收到LiveData
上已设置的值后立即完成返回的 Flow 的情况(例如,使用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 工件保留了其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,允许您删除即使在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 构造函数来保持兼容性。 - 在
Dispatchers.Main
不可用(例如,Linux)的平台上,viewModelScope
将回退到EmptyCoroutineContext
。
受影响的工件
lifecycle-viewmodel
将大多数 API 移至common
,除了 Android 外还支持 jvm 和 iOS。lifecycle-viewmodel-ktx
现在为空,所有 API 都已移至lifecycle-viewmodel
。lifecycle-viewmodel-compose
将所有 API 移至common
并提供一个 Android 工件,与androidx.compose
的多平台支持相匹配。
行为变更
- 如果已添加具有相同
clazz: KClass<VM : ViewModel>
的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
类别的基线配置文件打包不正确的问题。这些现在打包在lifecycle-runtime
AAR 中。(aosp/3038274,b/322382422) - 修复了
AutoCloseable
实例附加到 ViewModel 的清除方式中意外的顺序更改 - 已恢复之前的顺序: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 构造函数来保持兼容性。 - 在
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 扩展现在已移动到基本 lifecycle 模块。(Id787b,b/274800183)lifecycle-runtime-ktx
kotlin 扩展现在已移动到基本 lifecycle 模块。(Ic3686,b/274800183)lifecycle-livedata-core-ktx
kotlin 扩展现在已移动到基本 lifecycle 模块。(I54a3d,b/274800183)
Kotlin 多平台兼容性
Lifecycle
、LifecycleOwner
、LifecycleObserver
、Lifecycle.State
、Lifecycle.Event
和LifecycleRegistry
中的核心 Lifecycle 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
现在支持使用允许通过getCloseable()
检索它们的key
添加Closeable
对象。(I3cf63)
2.7 版本
2.7.0 版本
2024年1月10日
已发布 androidx.lifecycle:lifecycle-*:2.7.0
。2.7.0 版本包含这些提交。
自 2.6.0 版本以来的重要更改
TestLifecycleOwner
现在包含一个挂起函数setCurrentState()
,该函数确保在返回之前完成状态更改和所有LifecycleObserver
回调。值得注意的是,与直接设置currentState
属性不同,这不会使用runBlocking
,因此可以在协程(例如runTest
提供的协程)中安全使用。LiveData
的map
和switchMap
扩展现在镜像distinctUntilChanged
的行为 - 如果LiveData
设置了value
,则将立即调用map
/switchMap
函数来填充返回的LiveData
的value
。这确保初始值将作为第一次组合的一部分设置(当与observeAsState()
一起使用时),但不更改观察行为 - 来自源LiveData
的更新值只有在你开始观察LiveData
后才会生效。- 此版本修复了一个问题,即在进程死亡和重新创建后,
SavedStateHandle
无法正确恢复自定义Parcelable
类。由于 Android 框架丢失了类型信息,自定义 Parcelables 的数组需要额外的工作(手动创建正确类型的类型化数组),并且get
、getLiveData
和getStateFlow
的文档现在特别指出了此限制。 - 已删除与
LifecycleObserver
相关的 proguard 保留规则。这意味着希望通过反射使用 API 的 proguarded 代码(例如使用早已弃用的@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
暴露为 Compose 的State
。这等效于(并且是更简短的替代方案)lifecycle.currentStateFlow.collectAsState()
。
更多信息请参见 使用 Flow 收集生命周期状态。
版本 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
时正确地释放和重新创建 effect 块。(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()
现在会在ViewModel
已收到对onCleared()
的调用时立即关闭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
的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 State。 Lifecycle.launchWhenX
方法和Lifecycle.whenX
方法已弃用,因为在某些情况下使用暂停调度程序会导致资源浪费。建议使用Lifecycle.repeatOnLifecycle
。有关一次性挂起工作的更多信息,请参阅 此说明,了解为什么这从根本上是不安全的。- Kotlin 转换 - 大量 Lifecycle 类已转换为 Kotlin。所有转换后的类仍然保持与先前版本的二进制兼容性。以下类对用 Kotlin 编写的类进行了源代码不兼容的更改:
ViewTreeLifecycleOwner
、LiveDataReactiveStreams
、HasDefaultViewModelProviderFactory
、ViewTreeViewModelStoreOwner
、Transformations
、ViewModelStoreOwner
、LifecycleOwner
下表提供了新版 lifecycle 的源代码转换。
Lifecycle 2.5 | Lifecycle 2.5 (KTX) | Lifecycle 2.6 |
---|---|---|
Transformations.switchMap(liveData) {...} |
liveData.switchMap {...} |
liveData.switchMap {...} |
Transformations.map(liveData) {...} |
liveData.map {...} |
liveData.map {...} |
Transformations.distinctUntilChanged(liveData) {...} |
liveData.distinctUntilChanged{...} |
liveData.distinctUntilChanged{...} |
LiveDataReactiveStreams.fromPublisher(publisher) |
publisher.toLiveData() |
publisher.toLiveData() |
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) |
liveData.toPublisher(lifecycleOwner) |
liveData.toPublisher(lifecycleOwner) |
override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory |
override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory |
override val defaultViewModelProviderFactory = factory |
override fun getDefaultViewModelCreationExtras(): CreationExtras = extras |
override fun getDefaultViewModelCreationExtras(): CreationExtras = extras |
override val defaultViewModelProviderCreationExtras = extras |
ViewTreeLifecycleOwner.set(view, owner) |
ViewTreeLifecycleOwner.set(view, owner) |
view.setViewTreeLifecycleOwner(owner) |
ViewTreeLifecycleOwner.get(view) |
view.findViewTreeLifecycleOwner() |
view.findViewTreeLifecycleOwner() |
override fun getViewModelStore(): ViewModelStore = store |
override fun getViewModelStore(): ViewModelStore = store |
override val viewModelStore: ViewModelStore = store |
override fun getLifecycle(): Lifecycle = registry |
override fun getLifecycle(): Lifecycle = registry |
override val lifecycle: Lifecycle get() = registry |
- 在 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 编写。对于直接使用诸如Transformations.map
之类语法的 Kotlin 类来说,这是一个源代码不兼容的更改 - 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)
错误修复
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
)构件现在包含约束,以确保所有相互依赖的生命周期构件使用相同的版本,并在升级其中一个构件时自动升级其他依赖项。b/242871265 FlowLiveData.asFlow()
现在创建callbackFlow
,而不是使用其自身的Channel
实现,以确保线程安全和上下文保留。(I4a8b2,b/200596935)FlowLiveData
的asLiveData
函数现在将在创建新的LiveData
对象时保留StateFlow
的初始值。(I3f530,b/157380488)- 从Lifecycle
2.5.1
开始:当与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状态。当生命周期至少处于某个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,该 API 返回一个KotlinStateFlow
,用于监控值更改,作为使用LiveData
的替代方法。**ViewModel 创建额外信息 (ViewModel CreationExtras)** - 在编写自定义
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,该 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 版本包含这些提交。
新功能
- 添加了
SavedStateHandle.saveable
的实验性MutableState
重载,以与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,它返回一个 Kotlin `StateFlow` 用于监控值变化,作为使用 `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` 创建 ViewModel,而无需设置应用程序。(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
或使用 Kotlin 属性扩展 by viewModels()
和 by activityViewModels()
时,这些额外内容将自动提供给您的自定义 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
方法不再允许可为空的泛型。
- 破坏性更改:
- 向
androidx.lifecycle:lifecycle-runtime-ktx
添加了新的协程 API Lifecycle.repeatOnLifecycle
,一个在生命周期至少处于特定状态时在协程中执行代码块的 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 检查,用于检测在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 在生命周期至少处于特定状态时从上游 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 版本包含以下提交。
新功能
- 在
androidx.lifecycle.viewmodel.compose
包中,viewModel()
组合函数和LocalViewModelStoreOwner
已从androidx.compose.ui.viewinterop
移动到此构件。(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
对不可打包类的支持:SavedStateHandle
现在支持延迟序列化,允许您为给定的键调用setSavedStateProvider()
,提供一个SavedStateProvider
,该提供程序将在SavedStateHandle
被要求保存其状态时获得对saveState()
的回调。请参阅 保存不可打包类。- 生命周期行为强制:
LifecycleRegistry
现在强制执行DESTROYED
作为终端状态。LifecycleRegistry
现在验证其方法是在主线程上调用的。对于活动、片段等的生命周期,这始终是必需的。从非主线程添加观察者会导致运行时难以捕获的崩溃。对于您自己的组件拥有的LifecycleRegistry
对象,您可以使用LifecycleRegistry.createUnsafe(...)
明确选择退出检查,但是,您必须确保在此LifecycleRegistry
从不同线程访问时已到位适当的同步。
- 生命周期状态和事件帮助程序:为
Lifecycle.Event
添加了downFrom(State)
、downTo(State)
、upFrom(State)
、upTo(State)
的静态帮助程序方法,用于根据State
和转换方向生成Event
。添加了getTargetState()
方法,该方法提供Lifecycle
将在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()
方法现在在保存状态之前和之后保持一致 - 它现在除了使用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 版本包含以下提交。
新功能
- 为
Lifecycle.Event
添加了downFrom(State)
、downTo(State)
、upFrom(State)
、upTo(State)
的静态帮助程序方法,用于根据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
,以更好地支持应用程序不可用且不需要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()
已弃用。使用 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 版本包含以下提交。
错误修复
- 修复了当模拟的
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 低于 29,则会影响运行 API 28+ 的设备。(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)
错误修复
- 修复了包含的
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
,这是一个用于 ViewModels 的工厂,它在create
方法中接收key
和Class
。
2.0.0 版本
2.0.0 版本
2018 年 9 月 21 日
Lifecycle 2.0.0
版本已发布,其中包含一个针对 2.0.0-rc01
中 ViewModel 的错误修复。
错误修复
- 修复了 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
。