生命周期
下表列出了 androidx.lifecycle 组中的所有工件。
| 制品 | 稳定版 | 候选版 | Beta 版 | Alpha 版 |
|---|---|---|---|---|
| lifecycle-* | 2.9.4 | - | 2.10.0-beta01 | - |
| lifecycle-viewmodel-navigation3 | - | - | 2.10.0-beta01 | - |
声明依赖项
如需为 Lifecycle 添加依赖项,您必须将 Google Maven 制品库添加到项目中。如需了解详情,请参阅 Google 的 Maven 制品库。
在应用或模块的 build.gradle 文件中添加所需工件的依赖项:
Kotlin
Groovy
dependencies { def lifecycle_version = "2.9.4" 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:2.10.0-beta01" // 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.4" 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:2.10.0-beta01") // 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.4" 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.4" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // Annotation processor annotationProcessor("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
如需详细了解依赖项,请参阅添加 build 依赖项。
反馈
您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对此库有任何改进建议,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。
如需了解详情,请参阅问题跟踪器文档。
版本 2.10
版本 2.10.0-beta01
2025 年 10 月 22 日
发布了 androidx.lifecycle:lifecycle-*:2.10.0-beta01。版本 2.10.0-beta01 中包含这些提交内容。
API 变更
ViewModelStoreNavEntryDecoratorDefault已重命名为ViewModelStoreNavEntryDecoratorDefaults,并添加了“s”。(I6d27b、b/444447434)
bug 修复
- 如果所有者在移至
Lifeycle.State.CREATED之前收到Lifecycle.Event.ON_DESTROY事件,rememberLifecycleOwner不再会发生崩溃。(I6f98e、b/444594991)
版本 2.10.0-alpha05
2025 年 10 月 8 日
发布了 androidx.lifecycle:lifecycle-*:2.10.0-alpha05。版本 2.10.0-alpha05 包含这些提交内容。
API 变更
removeViewModelStoreOnPopCallback()现在是ViewModelStoreNavEntryDecoratorDefault对象的一部分,其他平台和实现可以在其中调用默认值。(Ia1f23、b/444447434)- 将
ViewModelStoreNavEntryDecorator从函数重构为类,以更好地反映其作为NavEntryDecorator工厂的功能,并将装饰器的shouldRemoveViewModelStore形参重命名为removeViewModelStoreOnPop,以明确说明仅当从backStack中弹出条目时才会调用此回调。(Iefdc5、b/444447434)
版本 2.10.0-alpha04
2025 年 9 月 24 日
发布了 androidx.lifecycle:lifecycle-*:2.10.0-alpha04。版本 2.10.0-alpha04 包含这些提交内容。
API 变更
- 将
LifecycleOwner可组合项重构为rememberLifecycleOwner。该函数现在直接返回LifecycleOwner。如需将此所有者提供给子组合,请使用CompositionLocalProvider。(Ic57f0、b/444446629) - 向 lifecycle-viewmodel-navigation3 添加了 KMP 桩,以便 JetBrains 提供填充这些目标的 fork,从而支持 CMP。(I44a4c)
版本 2.10.0-alpha03
2025 年 8 月 27 日
发布了 androidx.lifecycle:lifecycle-*:2.10.0-alpha03。版本 2.10.0-alpha03 中包含这些提交内容。
API 变更
- 将 Compose 更新到 1.9.0。(I2b9de)
版本 2.10.0-alpha02
2025 年 8 月 13 日
发布了 androidx.lifecycle:lifecycle-*:2.10.0-alpha02。版本 2.10.0-alpha02 中包含这些提交内容。
新功能
LifecycleOwner可组合函数现在可以创建独立的根生命周期。通过(显式)设置parent = null,新生命周期可独立于任何宿主(如Activity、Fragment或NavBackStackEntry)运行。它会在可组合函数进入组合时立即启动,并在离开时自动销毁。(I8dfbe、b/433659048)@Composable fun IndependentComponent() { // Create a standalone lifecycle, not tied to the parent Activity/Fragment. LifecycleOwner(parent = null) { val rootLifecycle = LocalLifecycleOwner.current.lifecycle } }
API 变更
- 在
LifecycleOwner可组合项中,parentLifecycleOwner参数已重命名为parent。(I080bc)
bug 修复
LifecycleOwner可组合项现在会在处置时正确地将其生命周期移至DESTROYED。这样可以防止持有生命周期引用的外部代码发生潜在的泄漏。(I9e5b7、b/433659048)- 将默认 minSdk 从 API 21 移至 API 23(Ibdfca、b/380448311、b/435705964、b/435705223)
外部贡献
- 从
LifecycleOwner中移除了不必要的内部支持字段。感谢 Jake Wharton 的贡献。(Ideddb)
版本 2.10.0-alpha01
2025 年 7 月 30 日
发布了 androidx.lifecycle:lifecycle-*:2.10.0-alpha01。版本 2.10.0-alpha01 中包含这些提交内容。
新功能
添加
LifecycleOwner可组合项,以直接在界面内创建作用域生命周期。这对于需要独立管理自身生命周期的组件非常有用。如需查看 Navigation3 如何集成此新可组合项的示例,请参阅 aosp/3708610。(76cbf7)@Composable fun MyComposable() { LifecycleOwner( maxLifecycle = RESUMED, parentLifecycleOwner = LocalLifecycleOwner.current, ) { val childLifecycleOwner = LocalLifecycleOwner.current } }
API 变更
- 为
CreationExtras添加了构建器工厂函数,从而提供更便捷且更规范的 Kotlin API。(Iab2bd) - 在
SavedStateHandle.saved中添加了对可为 null 的类型的原生支持,从而简化了可为 null 的属性的保存和恢复。(I54d69、b/421325690) - 将
SavedStateHandle构造函数标记为@VisibleForTesting。(Iff0e0、b/408002794)
版本 2.9
版本 2.9.4
2025 年 9 月 17 日
发布了 androidx.lifecycle:lifecycle-*:2.9.4。版本 2.9.4 中包含这些提交内容。
bug 修复
- 修复了未应用 Compose 编译器插件导致生命周期 KMP 制品损坏的错误。(Ie95bc、b/443096483、b/443965665)
版本 2.9.3
2025 年 8 月 27 日
发布了 androidx.lifecycle:lifecycle-*:2.9.3。版本 2.9.3 中包含这些提交内容。
新功能
- 向 Lifecycle
*-compose制品添加了新的 Kotlin Multiplatform (KMP) 目标。生命周期现在总共支持以下平台:JVM(Android 和桌面)、原生(Linux、iOS、watchOS、macOS、MinGW)和 Web(JavaScript、WasmJS)。 (I0a0e4)
bug 修复
- 将
androidx.annotation更新为 1.9.1(Ic9e4f、b/397701294)
版本 2.9.2
2025 年 7 月 16 日
发布了 androidx.lifecycle:lifecycle-*:2.9.2。版本 2.9.2 中包含这些提交内容。
bug 修复
- 向 Lifecycle 制品添加了新的 Kotlin Multiplatform (KMP) 目标。生命周期现在总共支持以下平台:JVM(Android 和桌面)、原生(Linux、iOS、watchOS、macOS、MinGW)和 Web(JavaScript、WasmJS)。请注意,
*-compose制品中未添加任何新的 KMP 目标平台,因为这取决于 Compose 1.9 的稳定版。(I01cb8)。
依赖项更新
- 生命周期现在依赖于 Annotation
1.9.1,以支持新的 KMP 目标(Ic9e4f、b/397701294)。
版本 2.9.1
2025 年 6 月 4 日
发布了 androidx.lifecycle:lifecycle-*:2.9.1。版本 2.9.1 中包含这些提交内容。
bug 修复
- 修复了
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-testingKMP 制品,其中提供了一个ViewModelScenario类,用于单独测试ViewModels,支持onCleared和SavedStateHandle,以及通过recreate()测试进程终止和重新创建。 - 向
SavedStateHandle添加getMutableStateFlow以返回MutableStateFlow。此新函数是密钥专用的,不能与getLiveData搭配使用。如果您尝试同时使用这两个属性来访问同一状态,系统会抛出异常。 CreationExtras现在包含类似 Map 的运算符重载,以便在 Kotlin 中以规范的方式操作内容。它允许将in、+=和+与CreationExtras搭配使用。
KotlinX 序列化支持
借助 SavedState
1.3.0中添加的 KotlinX 序列化支持,我们引入了saved(一种延迟属性委托),以便轻松地将@Serializable类存储在SavedStateHandle中,并让这些类在进程被销毁和重新创建后自动恢复。请注意,saved委托是延迟的,在被访问之前不会调用initlambda 或将任何内容保存到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 中包含这些提交内容。
Lint API 兼容性警告
- JetBrains 将
KaCallableMemberCall从类更改为接口,这会破坏二进制文件兼容性。如果项目的 AGP 版本与用于编译 lint 检查的版本不同,可能会导致崩溃。此更新已在 aosp/3577172 中进行,但发布说明中未提及,因此我们在此处进行说明。 建议的解决方法:更新到最新的稳定版 AGP。如果您无法完全更新,请使用android.experimental.lint.version使 lint 检查与您的 AGP 版本保持一致 - 如需了解详情,请参阅 Compose 运行时行为变更。
版本 2.9.0-beta01
2025 年 4 月 9 日
发布了 androidx.lifecycle:lifecycle-*:2.9.0-beta01。版本 2.9.0-beta01 中包含这些提交内容。
API 变更
Lifecycle ViewModel Compose现在使用与 Compose 运行时 1.7.1 及更高版本相同的 Kotlin 多平台设置 --desktop制品现已移除,并添加了-jvmStubs和-linuxx64Stubs制品。这些目标均不打算使用,它们只是占位符,用于帮助 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)
外部贡献
- 添加了新的 Lint 问题,用于检测在组合中调用
Lifecycle::currentState的情况,建议改用currentStateAsalue().value,以确保生命周期状态的更改能正确触发重组。感谢 Steven Schoen!(Iad484)
版本 2.9.0-alpha09
2025 年 1 月 29 日
发布了 androidx.lifecycle:lifecycle-*:2.9.0-alpha09。版本 2.9.0-alpha09 中包含这些提交内容。
新功能
- 添加了用于序列化
androidx.compose.runtime.MutableState的MutableStateSerializer。(Idfc48、b/378895074)
API 变更
- 将重载的
SavedStateHandle.saved()委托函数替换为默认参数 (Icd1c1) AbstractSavedStateViewModelFactory已被废弃,因为它会为每个ViewModel创建一个SavedStateHandle,从而导致不必要的开销。请改用ViewModelProvider.Factory和CreationExtras.createSavedStateHandle,以便更高效地创建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) - 现在,通过各自的
findViewTreeAPI 检索到的LifecycleOwner和ViewModelStoreOwner实例可以通过视图的不相交父级(例如ViewOverlay)进行解析。如需详细了解不相交的视图父级,请参阅核心版本说明或ViewTree.setViewTreeDisjointParent中的文档。(I800f4)
API 变更
- 使命名和软件包组织与
SavedStateRegistryOwnerDelegate更加一致(I8c135、b/376026744)
bug 修复
- 此库现在使用 JSpecify nullness 注解,这些注解属于 type-use 类型。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 兼容性
- 生命周期
ViewModel SavedState现在与 KMP 兼容。这样,您就可以在通用代码中使用SavedStateHandle。(Ib6394、b/334076622)
KotlinX 序列化支持
借助 SavedState
1.3.0-alpha05中添加的 KotlinX 序列化支持,我们引入了saved(一种延迟属性委托),以便轻松地将@Serializable类存储在SavedStateHandle中,并让这些类在进程被销毁和重新创建后自动恢复。请注意,saved委托是延迟的,在被访问之前不会调用initlambda 或将任何内容保存到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)
bug 修复
- 当
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 中包含这些提交内容。
bug 修复
- 从 Lifecycle
2.8.6开始:NullSafeMutableLiveDataLint 错误已改进对智能转换的支持,避免了误报。(85fed6、b/181042665)
依赖项更新
- 从 Lifecycle
2.8.6开始:Lifecycle Runtime Compose 现在依赖于 Compose Runtime1.7.1 - 生命周期运行时现在依赖于 ProfileInstaller
1.4.0
版本 2.9.0-alpha02
2024 年 9 月 4 日
发布了 androidx.lifecycle:lifecycle-*:2.9.0-alpha02。版本 2.9.0-alpha02 中包含这些提交内容。
bug 修复
- 从 Lifecycle
2.8.5开始:更新了androidx.lifecycle.ReportFragmentProGuard 规则,以允许混淆处理。(ff898e1)
外部贡献
- 将
androidx.compose.ui.platform.LocalLifecycleOwner移至通用源代码集 (KMP)。感谢 JetBrains 的 Ivan Matkov 为此做出的贡献。(8cd5d03) - 从 Lifecycle
2.8.5开始:SavedStateHandle.saveable 扩展委托现在支持可为 null 的值。感谢 Roman Kalukiewicz 的贡献。(0d78ea6)
版本 2.9.0-alpha01
2024 年 8 月 7 日
发布了 androidx.lifecycle:lifecycle-*:2.9.0-alpha01。版本 2.9.0-alpha01 包含这些提交内容。
Kotlin Multiplatform
lifecycle-testing现在与 KMP 兼容。(Iea41e)- 添加了对
linuxArm64Kotlin Multiplatform 目标的支持(I139d3、b/338268719)
新功能
- 我们推出了新的
androidx.lifecycle:lifecycle-viewmodel-testingKMP 制品,其中提供了一个ViewModelScenario类,用于单独测试 ViewModel,并支持onCleared(所有平台)和SavedStateHandle(仅限 Android)。(337f68d、c9b3409、9799a95c、b/264602919) - 现在,使用
ViewModelProvider创建ViewModel是线程安全的;已移除@MainThread注释。(Ifd978、b/237006831)
API 变更
- 添加了
CreationExtras.Key()工厂函数,以简化匿名CreationExtras.Key对象的创建。(I970ee) CreationExtras现在包含类似 Map 的运算符重载,以便在 Kotlin 中以规范的方式操作内容。它允许将in、+=和+与CreationExtras搭配使用。(Ib4353)CreationExtras现在实现了equals、hashCode和toString方法。(Ib4353)NewInstanceFactory现已在 JVM 桌面设备和 Android 目标平台上提供。(d3d0892)- 内联扩展属性,可在 Kotlin 语言版本 2.0 中安全地公开底层应用 (I39df2)
bug 修复
- 移除了对新平台 API 的访问权限进行手动概述的功能,这是因为在使用 AGP 7.3 或更高版本(例如 R8 版本 3.3)的 R8 时,以及在使用 AGP 8.1 或更高版本(例如 D8 版本 8.1)的所有 build 时,系统会通过 API 建模自动进行 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制品,并添加了-jvmStubs和-linuxx64Stubs制品。这些目标均不打算使用,它们只是占位符,用于帮助 Jetbrains Compose 开展工作。(6a3f5b3)
版本 2.8.6
2024 年 9 月 18 日
发布了 androidx.lifecycle:lifecycle-*:2.8.6。版本 2.8.6 中包含这些提交内容。
bug 修复
NullSafeMutableLiveDataLint 错误已改进对智能转换的支持,避免了误报。(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 包含这些提交内容。
bug 修复
- 更新了
androidx.lifecycle.ReportFragmentProGuard 规则,以允许混淆处理。(ff898e1)
外部贡献
SavedStateHandle.saveable扩展委托现在支持可为 null 的值。感谢 Roman Kalukiewicz 的贡献。(0d78ea6)
版本 2.8.4
2024 年 7 月 24 日
发布了 androidx.lifecycle:lifecycle-*:2.8.4。版本 2.8.4 包含这些提交内容。
bug 修复
LiveData.asFlow()现在可正确处理以下情况:返回的 Flow 在收到已在LiveData上设置的值后立即完成(例如,在使用take(1)时)。(I9c566)Lifecycle*Effect完成现在是幂等的(即,如果onStopOrDispose是因生命周期停止而被调用,则在处置时不会再次调用,除非生命周期再次变为STARTED)。(I5f607、b/352364595)
版本 2.8.3
2024 年 7 月 1 日
发布了 androidx.lifecycle:lifecycle-*:2.8.3。版本 2.8.3 中包含这些提交内容。
bug 修复
- 修复了使用代码缩减功能时,Lifecycle 2.8 与 Compose 1.6.0 及更低版本的向后兼容性问题。(aosp/3133056、b/346808608)
版本 2.8.2
2024 年 6 月 12 日
发布了 androidx.lifecycle:lifecycle-*:2.8.2。版本 2.8.2 中包含这些提交内容。
bug 修复
- 修复了将 Lifecycle 2.8.X 与 Compose 1.6.X 或更低版本搭配使用时出现的
CompositionLocal LocalLifecycleOwner not present错误 - 现在,您可以将 Lifecycle 2.8.2 与任何版本的 Compose 搭配使用,而无需任何解决方法。(aosp/3105647、b/336842920) - 将先前版本的
compileOnly生命周期依赖项与版本 2.8 及更高版本混合时,ViewModelProvider不再崩溃,从而修复了 LeakCanary 等库的问题。(I80383、b/341792251)
版本 2.8.1
2024 年 5 月 29 日
发布了 androidx.lifecycle:lifecycle-*:2.8.1。版本 2.8.1 中包含这些提交内容。
bug 修复
lifecycle-viewmodel-compose现在仅对compose-runtime具有通用依赖项,移除了其对compose-ui的通用依赖项。Android 制品保留了其compose-ui以实现兼容性。(aosp/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 界面移至lifecycle-runtime-compose,以便在 Compose 界面之外使用其基于 Compose 的辅助 API。lifecycle-runtime-compose制品现在包含dropUnlessResumed和dropUnlessStartedAPI,即使在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 所镜像的DisposableEffectAPI 的约定相同。废弃了
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData),取而代之的是LiveData.toPublisher(lifecycleOwner)。lifecycle-livedata-core-ktxKotlin 扩展现已移至lifecycle-livedata-core模块。NullSafeMutableLiveData已重构,以避免出现大量误报。
生命周期 Kotlin Multiplatform 兼容性
Lifecycle、LifecycleOwner、LifecycleObserver、Lifecycle.State、Lifecycle.Event 和 LifecycleRegistry 中的核心生命周期 API 现在以与 Kotlin Multiplatform 兼容的制品形式提供。
受影响的制品:
lifecycle-common将大多数 API 移至common,除了 Android 之外,还支持 JVM 和 iOS。lifecycle-runtime将大多数 API 移至common,除了 Android 之外,还支持 JVM 和 iOS。lifecycle-runtime-ktx现在为空,所有 API 都已移至lifecycle-runtime。lifecycle-runtime-compose将所有 API 移至common,并提供 Android 制品,以匹配androidx.compose的多平台支持。
ViewModel Kotlin Multiplatform 兼容性
lifecycle-viewmodel 工件和 ViewModel、ViewModelStore、ViewModelStoreOwner 和 ViewModelProvider 等 API 现在以与 Kotlin Multiplatform 兼容的工件形式提供。
为了适应此项更改,之前接受 java.lang.Class<T> 的 ViewModelProvider 等方法现在具有接受 kotlin.reflect.KClass<T> 的等效方法。
Android 上的二进制兼容性已得到维护,但与通用 API 界面相比,Android API 界面存在一些值得注意的变更:
- 现在,构建
ViewModelProvider实例是通过ViewModelProvider.create()方法完成的,而不是直接调用其构造函数。 ViewModelProvider.NewInstanceFactory和ViewModelProvider.AndroidViewModelFactory仅适用于 Android 设备。- 建议自定义 Factory 从
ViewModelProvider.Factory扩展,并使用采用CreationExtras的create方法或使用viewModelFactoryKotlin DSL。
- 建议自定义 Factory 从
- 在非 JVM 平台上使用
ViewModelProvider而不使用自定义工厂会导致UnsupportedOperationException。在 JVM 平台上,如果没有提供自定义工厂,系统会使用无实参 ViewModel 构造函数来保持兼容性。 - 在
Dispatchers.Main不可用的平台(例如,viewModelScopeEmptyCoroutineContextLinux)。
受影响的制品:
lifecycle-viewmodel将大多数 API 移至common,除了 Android 之外,还支持 JVM 和 iOS。lifecycle-viewmodel-ktx现在为空,所有 API 都已移至lifecycle-viewmodel。lifecycle-viewmodel-compose将所有 API 移至common,并提供 Android 制品,以匹配androidx.compose的多平台支持。
行为变更
InitializerViewModelFactory(包括viewModelFactory构建器函数)现在会在已添加具有相同clazz: KClass<VM : ViewModel>的initializer时抛出IllegalArgumentException。(Ic3a36)
已知问题
lifecycle-*:2.8.0需要最低 Compose 版本 1.7.0-alpha05 (b/336842920)。
版本 2.8.0-rc01
2024 年 5 月 1 日
发布了 androidx.lifecycle:lifecycle-*:2.8.0-rc01。版本 2.8.0-rc01 中包含这些提交内容。
bug 修复
- 修复了
lifecycle-common类的基准配置文件未正确打包的问题。这些内容现在已打包在lifecycle-runtimeAAR 中。(aosp/3038274、b/322382422) - 修复了附加到 ViewModel 的
AutoCloseable实例的清除顺序意外更改的问题 - 恢复了之前的顺序:addCloseable(String, AutoCloseable)、addClosable(AutoCloseable),然后是onCleared()。(aosp/3041632) - 改进了
viewModelScope在原生和 JVM 桌面环境中的默认创建行为。(aosp/3039221)
外部贡献
- 感谢 Victor Kropp 改进了 JVM 桌面版上的主线程检查。(aosp/3037116)
版本 2.8.0-beta01
2024 年 4 月 17 日
发布了 androidx.lifecycle:lifecycle-*:2.8.0-beta01。版本 2.8.0-beta01 中包含这些提交内容。
新功能
lifecycle-runtime-compose制品现在与 Kotlin Multiplatform 兼容,将其代码移至common并提供 Android 制品,与androidx.compose的多平台支持相匹配。(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 Multiplatform 兼容,已将其代码移至common,并提供 Android 制品,与androidx.compose的多平台支持相匹配。为了适应此项更改,可组合函数viewModel方法现在除了接受java.lang.Class之外,还接受KClass。(b/330323282)
bug 修复
依赖项更新
lifecycle-viewmodel-compose工件现在依赖于 Compose 1.6.0。- Lifecycle 现在依赖于 Profile Installer 1.3.1。
版本 2.8.0-alpha03
2024 年 3 月 20 日
发布了 androidx.lifecycle:lifecycle-*:2.8.0-alpha03。版本 2.8.0-alpha03 中包含这些提交内容。
新功能
ViewModel.viewModelScope现在是一个可替换的构造函数参数,可让您注入自己的调度器和SupervisorJob(),或使用runTest中提供的backgroundScope替换默认值。(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 工件和 ViewModel、ViewModelStore、ViewModelStoreOwner 和 ViewModelProvider 等 API 现在以与 Kotlin Multiplatform 兼容的工件形式提供。(b/214568825)
为了适应此项更改,之前接受 java.lang.Class<T> 的 ViewModelProvider 等方法现在具有接受 kotlin.reflect.KClass<T> 的等效方法。
Android 上的二进制兼容性已得到维护,但与通用 API 界面相比,Android API 界面存在一些值得注意的变更:
- 现在,构建
ViewModelProvider实例是通过ViewModelProvider.create()方法完成的,而不是直接调用其构造函数。 ViewModelProvider.NewInstanceFactory和ViewModelProvider.AndroidViewModelFactory仅适用于 Android 设备。- 建议自定义 Factory 从
ViewModelProvider.Factory扩展,并使用采用CreationExtras的create方法或使用viewModelFactoryKotlin DSL。
- 建议自定义 Factory 从
- 在非 JVM 平台上使用
ViewModelProvider而不使用自定义工厂会导致UnsupportedOperationException。在 JVM 平台上,如果没有提供自定义工厂,系统会使用无实参 ViewModel 构造函数来保持兼容性。 - 在
Dispatchers.Main不可用的平台(例如,viewModelScopeEmptyCoroutineContextLinux)。
行为变更
InitializerViewModelFactory(包括viewModelFactory构建器函数)现在会在已添加具有相同clazz: KClass<VM : ViewModel>的initializer时抛出IllegalArgumentException。(Ic3a36)
bug 修复
ViewModel.getCloseable现在可以处理重复的键:如果key已经关联了AutoCloseable资源,则旧资源将被替换并立即关闭。(Ibeb67)- 现在,访问
ViewModel的viewModelScope是线程安全的。(If4766、b/322407038)
外部贡献
LocalLifecycleOwner从 Compose 界面移到了 lifecycle-runtime-compose,以便其基于 Compose 的辅助 API 可以在 Compose 界面之外使用。感谢 Jake Wharton 的贡献。(I6c41b、b/328263448)
版本 2.8.0-alpha02
2024 年 2 月 21 日
发布了 androidx.lifecycle:lifecycle-*:2.8.0-alpha02。版本 2.8.0-alpha02 中包含这些提交内容。
新功能
- 添加了
dropUnlessResumed和dropUnlessStartedAPI,可让您舍弃即使在LifecycleOwner降至给定Lifecycle.State以下后发生的点击或其他事件。例如,此功能可与 Navigation Compose 搭配使用,以避免在已开始过渡到另一屏幕后处理点击事件:onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }(Icba83、b/317230685)
Kotlin 转换
ViewModel现已采用 Kotlin 编写(I16f26、b/214568825)lifecycle-viewmodel-ktxKotlin 扩展现已移至基本生命周期模块。(Id787b、b/274800183)lifecycle-runtime-ktxKotlin 扩展现已移至基本生命周期模块。(Ic3686、b/274800183)lifecycle-livedata-core-ktxKotlin 扩展现已移至基本生命周期模块。(I54a3d、b/274800183)
Kotlin Multiplatform 兼容性
Lifecycle、LifecycleOwner、LifecycleObserver、Lifecycle.State、Lifecycle.Event和LifecycleRegistry中的核心生命周期 API 现在以与 Kotlin Multiplatform 兼容的制品形式提供。(b/317249252)
API 变更
- 现在,在没有密钥的情况下调用
LifecycleStartEffect和LifecycleResumeEffect会导致错误,这与这些 API 所镜像的DisposableEffectAPI 的约定相同。(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提供的协程)中安全使用。map和switchMap的LiveData扩展现在会镜像distinctUntilChanged的行为 - 如果LiveData设置了value,则会立即调用map/switchMap函数来填充返回的LiveData的value。这可确保初始值将作为首次组合的一部分进行设置(与observeAsState()搭配使用时),但不会改变观察行为 - 仅当您开始观察LiveData时,来自来源LiveData的更新值才会仍然适用。- 此版本修复了以下问题:
SavedStateHandle在进程终止和重新创建后无法正确恢复自定义Parcelable类。由于 Android 框架会丢失类型信息,因此自定义 Parcelable 数组需要额外的工作(手动创建正确类型的类型化数组),并且有关get、getLiveData和getStateFlow的文档现在专门指出了这一限制。 - 与
LifecycleObserver关联的 Proguard keep 规则已被移除。这意味着,希望通过反射使用 API 的 ProGuard 代码(例如使用早已弃用的@OnLifecycleEvent注释)需要针对其特定用例提供自己的保留规则。
生命周期事件可观测性
- 除了使用
LifecycleEventObserver之外,您现在还可以通过Lifecycle.asFlow()扩展方法观测Lifecycle.Event的Flow。 - Jetpack Compose 用户现在可以使用
LifecycleEventEffect根据Lifecycle.Event运行 Compose 副作用。
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
viewModel.refreshData()
}
// …
}
- Jetpack Compose 用户可以使用
LifecycleStartEffect和LifecycleResumeEffect来处理成对的事件,即从开始到停止和从恢复到暂停。此 API 与DisposableEffect中的 API 类似,适用于以下情况:当状态上升时所做的更改需要在状态下降时反转。
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
LifecycleStartEffect(viewModel) {
val timeTracking = viewModel.startTrackingTimeOnScreen()
onStopOrDispose {
timeTracking.stopTrackingTimeOnScreen()
}
}
// …
}
如需了解详情,请参阅在生命周期事件发生时运行代码。
生命周期状态可观测性
- 现在可以通过
Lifecycle.currentStateFlow属性观察当前的Lifecycle.State,该属性会返回一个StateFlow,其中value是当前的Lifecycle.State。 - Jetpack Compose 用户可以使用
Lifecycle.currentStateAsState()扩展程序直接将Lifecycle.State公开为 ComposeState。这相当于lifecycle.currentStateFlow.collectAsState()(也是一种更简短的替代方法)。
如需了解详情,请参阅使用数据流收集生命周期状态。
版本 2.7.0-rc02
2023 年 12 月 13 日
发布了 androidx.lifecycle:lifecycle-*:2.7.0-rc02。版本 2.7.0-rc02 中包含这些提交内容。
bug 修复
- 修复了以下问题:在进程终止和重新创建后,
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 中包含这些提交内容。
bug 修复
- 如果
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)
bug 修复
- 修复了
LiveData.switchMap的一个问题,即在初始调用和后续调用中返回相同的LiveData实例会阻止将该LiveData实例添加为来源。(Ibedcba7)
版本 2.7.0-alpha02
2023 年 9 月 6 日
发布了 androidx.lifecycle:lifecycle-*:2.7.0-alpha02。版本 2.7.0-alpha02 中包含这些提交内容。
新功能
TestLifecycleOwner现在包含挂起函数setCurrentState(),以便用户可以选择从协程(例如runTest提供的协程)中使用TestLifecycleOwner。(I329de、b/259344129)
API 变更
lifecycle-livedata-ktx模块中的所有文件都已移至主lifecycle-livedata模块。(I10c6f、b/274800183)
行为变更
- 如果前面的
LiveData设置了值,则LiveData.map()和LiveData.switchMap()扩展现在会设置返回的LiveData的value,确保在 Jetpack Compose 中使用生成的 LiveData 时,初始组合具有正确的状态。(I91d2b、b/269479952) - 如果
ViewModel已收到对onCleared()的调用,ViewModel的addCloseable()现在会立即关闭Closeable。(I4712e、b/280294730)
bug 修复
- 从 Lifecycle
2.6.2向后移植:修复了以下问题:如果状态已恢复,在未实际将状态保存在父SavedStateRegistry中就调用了save(),然后再次恢复状态,则SavedStateHandle在进程终止后无法正确恢复。此版本修复了rememberSaveable与 Navigation Compose 的NavHost之间的互动。(aosp/2729289)
版本 2.7.0-alpha01
2023 年 7 月 26 日
发布了 androidx.lifecycle:lifecycle-*:2.7.0-alpha01。版本 2.7.0-alpha01 中包含这些提交内容。
API 变更
Lifecycle.State现在可通过Lifecycle.currentStateFlow进行 Compose 可观测,后者会返回一个StateFlow,其中value是当前的Lifecycle.State。(Ib212d、b/209684871)- 现在,
Lifecycle.Event可以作为具有Lifecycle.asFlow().的Flow进行观测(If2c0f、b/176311030) - 添加了
LifecycleResumeEffectAPI,以基于Lifecycle.Event.ON_RESUME和Lifecycle.Event.ON_PAUSE事件回调运行 ComposeSideEffect。(I60386、b/235529345) - 添加了
LifecycleStartEffectAPI,用于基于Lifecycle.Event.ON_START和Lifecycle.Event.ON_STOP事件回调运行 ComposeSideEffect。(I5a8d1、b/235529345) - 添加了
LifecycleEventEffectAPI,以基于Lifecycle.Event运行 ComposeSideEffect。(Ic9794、b/235529345) - 添加了
Lifecycle.collectAsState()扩展,用于直接将Lifecycle.State作为 ComposeState公开。这相当于lifecycle.currentStateFlow.collectAsState()(也是一种更简短的替代方法)。(I11015、b/235529345)
bug 修复
- 如果前面的
LiveData设置了值,则LiveData.distinctUntilChanged()扩展现在会设置返回的LiveData的value。这不会改变观察行为 - 仅当您开始观察从distinctUntilChanged()返回的LiveData时,来自来源LiveData的更新值才会仍然适用。(Ib482f) - 与
LifecycleObserver关联的 Proguard keep 规则已被移除。这意味着,希望通过反射使用 API 的经过 ProGuard 处理的代码需要针对其特定用例提供自己的保留规则。(Ia12fd)
版本 2.6
版本 2.6.2
2023 年 9 月 6 日
发布了 androidx.lifecycle:lifecycle-*:2.6.2。版本 2.6.2 中包含这些提交内容。
bug 修复
- 修复了以下问题:如果状态已恢复,
save()在父SavedStateRegistry中调用时未实际保存状态,然后状态再次恢复,则SavedStateHandle在进程终止后无法正确恢复。此版本修复了rememberSaveable与 Navigation Compose 的NavHost之间的互动。(aosp/2729289)
版本 2.6.1
2023 年 3 月 22 日
发布了 androidx.lifecycle:lifecycle-*:2.6.1。版本 2.6.1 中包含这些提交内容。
依赖项更新
lifecycle-viewmodel-savedstate现在依赖于 SavedState1.2.1。(cd7251)- 生命周期现在依赖于 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设置了显式值,从而使得您能够区分返回null的liveData.value,因为之前未曾设置过任何值或未曾有过显式null值。- 现在,
MediatorLiveData包含一个用于设置初始值的构造函数。 - 在
collectAsStateWithLifecycle()的StateFlow和Flow上添加了一个新的扩展,该扩展从数据流中收集数据,并以可感知生命周期的方式将其最新值表示为 Compose 状态。 - 废弃了
Lifecycle.launchWhenX方法和Lifecycle.whenX方法,因为在某些情况下,使用暂停状态的调度程序可能会导致资源浪费。建议使用Lifecycle.repeatOnLifecycle。如需详细了解一次性暂停工作,请参阅此说明,了解为什么这种做法本身就不安全。 - Kotlin 转换 - 大量生命周期类已转换为 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方法的可为 null 性与泛型类型的一致。如果您希望Observer.onChanged()接受可为 null 的类型,则必须使用可为 null 的类型实例化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 中包含这些提交内容。
bug 修复
- 如果前面的
LiveData设置了值,则LiveData.distinctUntilChanged()扩展现在会设置返回的LiveData的value。这不会改变观察行为 - 仅当您开始观察从distinctUntilChanged()返回的LiveData时,来自来源LiveData的更新值才会仍然适用。(Ib482f)
版本 2.6.0-beta01
2023 年 2 月 8 日
发布了 androidx.lifecycle:lifecycle-*:2.6.0-beta01。版本 2.6.0-beta01 中包含这些提交内容。
Kotlin 转换
LifecycleOwner现在用 Kotlin 编写。对于使用 Kotlin 编写的类,这项变更与源代码不兼容。它们现在必须替换lifecycle属性,而不是实现之前的getLifecycle()函数。(I75b4b、b/240298691)ViewModelStoreOwner现在使用的是 Kotlin。对于使用 Kotlin 编写的类,这项变更与源代码不兼容。它们现在必须替换viewModelStore属性,而不是实现之前的getViewModelStore()函数。(I86409、b/240298691)- 提供
lifecycleScope字段的LifecycleOwnerKotlin 扩展已从lifecycle-runtime-ktx移至lifecycle-common工件。(I41d78、b/240298691) - 提供
coroutineScope字段的LifecycleKotlin 扩展已从lifecycle-runtime-ktx移至lifecycle-common工件。(Iabb91、b/240298691)
版本 2.6.0-alpha05
2023 年 1 月 25 日
发布了 androidx.lifecycle:lifecycle-*:2.6.0-alpha05。版本 2.6.0-alpha05 中包含这些提交内容。
Kotlin 转换
Transformations现在用 Kotlin 编写。对于使用 Kotlin 直接采用Transformations.map等语法编写的类,这项变更与源代码不兼容。现在,Kotlin 代码必须使用之前仅在使用lifecycle-livedata-ktx时可用的 Kotlin 扩展方法语法。使用 Java 编程语言时,这些接受androidx.arch.core.util.Function方法的版本已废弃,取而代之的是接受 KotlinFunction1的版本。此更改保持了二进制文件兼容性。(I8e14f)ViewTreeViewModelStoreOwner现在用 Kotlin 编写。对于用 Kotlin 编写的类,这项变更与源代码不兼容。现在,您必须直接在androidx.lifecycle.setViewTreeViewModelStoreOwner和androidx.lifecycle.findViewTreeViewModelStoreOwner的View上导入并使用 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设置了显式值,从而使得您能够区分返回null的liveData.value,因为之前未曾设置过任何值或未曾有过显式null值。(Ibd018)
API 变更
lifecycle-runtime-compose的collectAsStateWithLifecycle()API 不再处于实验状态。(I09d42、b/258835424)- 废弃了
Lifecycle.launchWhenX方法和Lifecycle.whenX方法,因为在某些情况下,使用暂停状态的调度程序可能会导致资源浪费。建议使用Lifecycle.repeatOnLifecycle。(Iafc54、b/248302832)
Kotlin 转换
ViewTreeLifecycleOwner现在用 Kotlin 编写。对于用 Kotlin 编写的类,这项变更与源代码不兼容。现在,您必须直接在androidx.lifecycle.setViewTreeLifecycleOwner和androidx.lifecycle.findViewTreeLifecycleOwner的View上导入并使用 Kotlin 扩展方法,才能设置和查找之前设置的所有者。这取代了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)
bug 修复
- 使用不正确的类类型调用
get()时,SavedStateHandle不会再因出现ClassCastException而崩溃。(I6ae7c)
版本 2.6.0-alpha03
2022 年 10 月 24 日
发布了 androidx.lifecycle:lifecycle-*:2.6.0-alpha03。版本 2.6.0-alpha03 中包含这些提交内容。
bug 修复
- 修复了不同生命周期模块之间的约束条件无法按预期运行的问题。(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)
bug 修复
- 现在,
Lifecycle工件包含相关约束条件,以确保所有相互依赖的 Lifecycle 工件使用同一版本,并且系统会在某个依赖项升级后自动升级其他依赖项。b/242871265 - 现在,
FlowLiveData.asFlow()会创建callbackFlow,而不是使用自己的Channel实现来确保线程安全和上下文保留性。(I4a8b2、b/200596935) - 现在,
FlowLiveData的asLiveData函数在创建新的LiveData对象时会保留StateFlow的初始值。(I3f530、b/157380488) - 从 Lifecycle
2.5.1起:现在,将有状态的构造函数与Lifecycle2.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 中包含这些提交内容。
新功能
- 在
collectAsStateWithLifecycle的StateFlow和Flow上添加了一个新的扩展,该扩展从数据流中收集数据,并以可感知生命周期的方式将其最新值表示为 Compose 状态。当生命周期至少处于某个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 中包含这些提交内容。
bug 修复
- 将有状态的
AndroidViewModelFactory构造函数与Lifecycle2.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 CreationExtras - 编写自定义
ViewModelProvider.Factory时,不再需要扩展AndroidViewModelFactory或AbstractSavedStateViewModelFactory即可分别访问Application或SavedStateHandle。现在会通过新的create过载 [create(Class<T>, CreationExtras)] 将这些字段作为CreationExtras提供给每个ViewModelProvider.Factory子类。使用 Activity1.5.0和 Fragment1.5.0时,您的 Activity 或 Fragment 会自动提供这些 extra。class CustomFactory : ViewModelProvider.Factory { override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T { return when (modelClass) { HomeViewModel::class -> { // Get the Application object from extras val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY]) // Pass it directly to HomeViewModel HomeViewModel(application) } DetailViewModel::class -> { // Create a SavedStateHandle for this ViewModel from extras val savedStateHandle = extras.createSavedStateHandle() DetailViewModel(savedStateHandle) } else -> throw IllegalArgumentException("Unknown class $modelClass") } as T } }lifecycle-viewmodel现在提供了一个viewModelFactoryKotlin DSL,它允许您以一个或多个 lambda 初始化程序的形式定义ViewModelProvider.Factory(您的自定义工厂支持的每个特定ViewModel类分别对应一个初始化程序,并使用CreationExtras作为主要数据源)。val customFactory = viewModelFactory { // The return type of the lambda automatically sets what class this lambda handles initializer { // Get the Application object from extras provided to the lambda val application = checkNotNull(get(ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY)) HomeViewModel(application) } initializer { val savedStateHandle = createSavedStateHandle() DetailViewModel(savedStateHandle) } }lifecycle-viewmodel-compose现在提供了一个viewModel()API,该 API 支持使用 lambda 工厂创建ViewModel实例,而无需创建自定义ViewModelProvider.Factory。// Within a @Composable, you can now skip writing a custom Factory // and instead write a lambda to do the initialization of your ViewModel val detailViewModel = viewModel { // This lambda is only called the first time the ViewModel is created // and all CreationExtras are available inside the lambda val savedStateHandle = createSavedStateHandle() DetailViewModel(savedStateHandle) }SavedStateHandle Compose Saver 集成 -
lifecycle-viewmodel-compose制品现在会在SavedStateHandle.saveable中包含新的实验性 API,这些 API 支持rememberSaveable,例如由 ViewModel 的SavedStateHandle提供支持的行为。class ListScreenViewModel(handle: SavedStateHandle): ViewModel() { // This value survives both configuration changes and process death and recreation val editMode by handle.saveable { mutableStateOf(false) } }添加了
addCloseable()API 和新的构造函数重载,使您能够向ViewModel添加一个或多个Closeable对象;这类对象在ViewModel被清除时就会关闭,而无需在onCleared()中执行任何手动操作。例如,如需创建可注入到 ViewModel 但通过测试进行控制的协程作用域,可以创建一个实现
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是否附有观察器,尝试将Lifecycle.State从INITIALIZED变为DESTROYED时始终会抛出IllegalStateException。 - 现在,
LifecycleRegistry会在观察器达到DESTROYED状态时对其进行清除。
版本 2.5.0-rc02
2022 年 6 月 15 日
发布了 androidx.lifecycle:lifecycle-*:2.5.0-rc02。版本 2.5.0-rc02 中包含这些提交内容。
bug 修复
- 将先前版本的 compileOnly Lifecycle 依赖项与版本 2.5 及更高版本混合时,
ViewModelProvider不再崩溃。(I81a66、b/230454566)
版本 2.5.0-rc01
2022 年 5 月 11 日
发布了 androidx.lifecycle:lifecycle-*:2.5.0-rc01。版本 2.5.0-rc01 中包含这些提交内容。
bug 修复
- 在被传递了
null来源而不是将null来源传播到观察器时,MediatorLiveData.addSource()现在会抛出NullPointerException。(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)
bug 修复
- 修复了以下问题:在使用多个返回堆栈时,将非主要底部导航标签页中的一个
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)
bug 修复
- 修复了由
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)
bug 修复
SavedStateViewFactory现在支持使用CreationExtras,即使其通过SavedStateRegistryOwner进行初始化也不受影响。如果提供 extra,则会忽略初始化的参数。(I6c43b、b/224844583)
版本 2.5.0-alpha04
2022 年 3 月 9 日
发布了 androidx.lifecycle:lifecycle-*:2.5.0-alpha04。版本 2.5.0-alpha04 中包含这些提交内容。
API 变更
SavedStateHandle现在提供了一个getStateFlow()API,该 API 会返回用于监控值更改的 KotlinStateFlow,可代替LiveData使用。(Iad3ab、b/178037961)
版本 2.5.0-alpha03
2022 年 2 月 23 日
发布了 androidx.lifecycle:lifecycle-*:2.5.0-alpha03。版本 2.5.0-alpha03 中包含这些提交内容
新功能
- 添加了
addCloseable()API 和新的构造函数重载,使您能够向ViewModel添加一个或多个Closeable对象;这类对象在ViewModel被清除时就会关闭,而无需在onCleared()中执行任何手动操作。(I55ea0) lifecycle-viewmodel现在提供了一个InitializerViewModelFactory,以允许添加用于处理特定ViewModel类的 lambda,并使用CreationExtras作为主要数据源。(If58fc、b/216687549)lifecycle-viewmodel-compose现在提供了一个viewModel()API,该 API 支持使用 lambda 工厂创建ViewModel实例,而无需创建自定义ViewModelProvider.Factory。(I97fbb、b/216688927)
API 变更
- 现在您可以通过
lifecycle-viewmodel-compose使用CreationExtras创建ViewModel。(I08887、b/216688927)
行为变更
- 现在,无论
Lifecycle是否附有观察器,尝试将Lifecycle.State从INITIALIZED转换为DESTROYED时始终会抛出IllegalStateException。(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。此项更改提升了这两个类中的泛型的可为 null 性。 (Ib6ce2、b/216168263、I9647a、b/177667711)LiveDataswitchMap函数参数现在可以具有可为 null 的输出。(I40396、b/132923666)LiveData-ktx 扩展现在使用@CheckResult添加注释,以便在调用这些函数时强制使用相应结果。(Ia0f05、b/207325134)
行为变更
- 现在,如果指定的键没有值,
SavedStateHandle可正确存储 defaultValue。(I1c6ce、b/178510877)
bug 修复
- 从 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 时,默认提供这些 extra。如果使用这些库的早期版本,CreationExtras 将为空:已重写 ViewModelProvider.Factory 的所有现有子类,以支持这些库的早期版本使用的旧创建路径和将来要使用的 CreationExtras 路径。
您可以使用这些 CreationExtras 构造 ViewModelProvider.Factory,将您需要的信息传递给每个 ViewModel,而无需依赖于 Factory 子类的严格层次结构:
class CustomFactory : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
return when (modelClass) {
HomeViewModel::class -> {
// Get the Application object from extras
val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY])
// Pass it directly to HomeViewModel
HomeViewModel(application)
}
DetailViewModel::class -> {
// Create a SavedStateHandle for this ViewModel from extras
val savedStateHandle = extras.createSavedStateHandle()
DetailViewModel(savedStateHandle)
}
else -> throw IllegalArgumentException("Unknown class $modelClass")
} as T
}
}
我们会在 SavedStateHandleSupport 中对 CreationExtras 使用 createSavedStateHandle() Kotlin 扩展函数,仅为需要 SavedStateHandle 的那个 ViewModel 构造一个 SavedStateHandle。(Ia6654、b/188541057)
可以通过在 ComponentActivity 或 Fragment 中替换 getDefaultViewModelCreationExtras() 来提供自定义 CreationExtras,从而将这些 extra 以内置辅助注入的形式提供给您的自定义 ViewModelProvider.Factory 使用。直接与 ViewModelProvider 一起使用或使用 by viewModels() 和 by activityViewModels() Kotlin 属性扩展项时,这些 extra 将自动可供自定义 Factory 使用。(I79f2b、b/207012584、b/207012585、b/207012490)
bug 修复
- 修复了以下问题:即使已专门从
SavedStateHandle中移除,提供给SavedStateHandle的默认值也会在进程终止和重新创建后重新出现。因此,SavedStateHandle不再将默认值和恢复的值合并在一起,而是仅使用恢复的值作为可信来源。(I53a4b)
版本 2.4
版本 2.4.1
2022 年 2 月 9 日
发布了 androidx.lifecycle:lifecycle-*:2.4.1。版本 2.4.1 中包含这些提交内容。
bug 修复
- 从 Lifecycle
2.5.0-alpha01向后移植 - 修复了以下问题:即使已专门从SavedStateHandle中移除提供给SavedStateHandle的默认值,该默认值也会在进程终止和重新创建后重新出现。因此,SavedStateHandle不再将默认值和恢复的值合并在一起,而是仅使用恢复的值作为可信来源。(I53a4b) lifecycle-process现在依赖于 Androidx Startup 1.1.1,该版本修复了使用ProcessLifecycleInitializer会导致StartupException的回归。(b/216490724)
版本 2.4.0
2021 年 10 月 27 日
发布了 androidx.lifecycle:lifecycle-*:2.4.0。版本 2.4.0 中包含这些提交内容。
自 2.3.0 以来的重要变更
- 废弃了
@OnLifecycleEvent。应改用LifecycleEventObserver或DefaultLifecycleObserver。 - 添加了
androidx.lifecycle:lifecycle-viewmodel-compose库。它提供了viewModel()可组合项和LocalViewModelStoreOwner。- 对源代码的重大变更:
ViewModelProvider已使用 Kotlin 重写。ViewModelProvider.Factory.create方法不再允许使用可为 null 的泛型。
- 对源代码的重大变更:
- 向
androidx.lifecycle:lifecycle-runtime-ktx添加了新的协程 API: Lifecycle.repeatOnLifecycle- 当 Lifecycle 至少处于某个状态时,此 API 会在协程中执行代码块。当 Lifecycle 进入和退出目标状态时,该代码块将取消并重新启动;Flow.flowWithLifecycle- 当 Lifecycle 至少处于某个状态时,此 API 会发出来自上游 flow 的值。DefaultLifecycleObserver已从lifecycle.lifecycle-common-java8移至lifecycle.lifecycle-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方法不再允许使用可为 null 的泛型。(I9b9f6)
行为变更
- 现在,在重复执行时,
Lifecycle.repeatOnLifecycle:block始终会按顺序调用。(Ibab33)
外部贡献
- 感谢 chao2zhang 修复
repeatOnLifecycle文档中的代码段。#205。
版本 2.4.0-alpha02
2021 年 6 月 16 日
发布了 androidx.lifecycle:lifecycle-*:2.4.0-alpha02。版本 2.4.0-alpha02 中包含这些提交内容。
新功能
- 向
lifecycle-runtime-ktx添加了新的RepeatOnLifecycleWrongUsagelint 检查,可检测何时在onStart()或onResume()中错误地使用了repeateOnLifecycle。(706078、b/187887400)
API 变更
- 移除了
LifecycleOwner.addRepeatingJobAPI,改为使用Lifecycle.repeatOnLifecycle,后者遵循结构化并发的要求,并且易于推断。(I4a3a8) - 将
ProcessLifecycleInitializer设为公开,以便其他androidx.startup.Initializer可将其用作依赖项。(I94c31)
bug 修复
- 修复了当字段包含修饰符时
NullSafeMutableLiveDatalint 检查出现的问题。(#147、b/183696616) - 修复了当使用泛型时
NullSafeMutableLiveDatalint 检查出现的另一个问题。(#161、b/184830263)
外部贡献
- 感谢 maxsav 改进了
NullSafeMutableLiveDatalint 检查。(#147、b/183696616) - 感谢 kozaxinan 改进了
NullSafeMutableLiveDatalint 检查。(#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.flowWithLifecycleAPI,当生命周期至少处于使用Lifecycle.repeatOnLifecycleAPI 的某个状态时,此 API 会发出来自上游 flow 的值。这是LifecycleOwner.addRepeatinJobAPI(也是新增的 API)的替代方案。(I0f4cd)
bug 修复
- 从 Lifecycle 2.3.1 开始:现在,
NonNullableMutableLiveDatalint 规则可以正确区分具有不同的可为 null 性的字段变量。(b/169249668)
Lifecycle Viewmodel Compose 版本 1.0.0
版本 1.0.0-alpha07
2021 年 6 月 16 日
发布了 androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07。版本 1.0.0-alpha07 中包含这些提交内容。
重要 API 更改
viewModel()现在接受可选的ViewModelStoreOwner,以便更轻松地与LocalViewModelStoreOwner以外的所有者合作。例如,您现在可以使用viewModel(navBackStackEntry)来检索与特定导航图相关联的 ViewModel。(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兼容。
bug 修复
- 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现在会返回可为 null 的ViewModelStoreOwner,以更好地确定ViewModelStoreOwner在当前组合中是否可用。如果未设置ViewModelStoreOwner,则需要ViewModelStoreOwner的 API(例如viewModel()和NavHost)仍会抛出异常。(Idf39a)
Lifecycle-Viewmodel-Compose 版本 1.0.0-alpha02
2021 年 2 月 24 日
发布了 androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02。版本 1.0.0-alpha02 中包含这些提交内容。
API 变更
LocalViewModelStoreOwner现在包含可与CompositionLocalProvider搭配使用的provides函数,替换了asProvidableCompositionLocal()API。(I45d24)
Lifecycle-Viewmodel-Compose 版本 1.0.0-alpha01
2021 年 2 月 10 日
发布了 androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01。版本 1.0.0-alpha01 中包含这些提交内容。
新功能
viewModel()可组合项和LocalViewModelStoreOwner已从androidx.compose.ui.viewinterop移至androidx.lifecycle.viewmodel.compose软件包的此制品中。(I7a374)
版本 2.3.1
Lifecycle 版本 2.3.1
2021 年 3 月 24 日
发布了 androidx.lifecycle:lifecycle-*:2.3.1。版本 2.3.1 中包含这些提交内容。
bug 修复
- 现在,
NonNullableMutableLiveDatalint 规则可以正确区分具有不同的可为 null 性的字段变量。(b/169249668)
版本 2.3.0
版本 2.3.0
2021 年 2 月 10 日
发布了 androidx.lifecycle:lifecycle-*:2.3.0。版本 2.3.0 中包含这些提交内容。
自 2.2.0 以来的重要变更
- 对非 Parcelable 类的
SavedStateHandle支持:SavedStateHandle现在允许您针对指定键调用setSavedStateProvider()以支持延迟序列化,从而提供SavedStateProvider,该构造函数会在SavedStateHandle被要求保存其状态时获得对saveState()的回调。请参阅保存非 Parcelable 类。 - Lifecycle 行为强制执行:
- LifecycleRegistry 现在强制将
DESTROYED作为终止状态。 LifecycleRegistry现在会验证其方法是否在主线程上调用。它始终是 activity、fragment 等的生命周期的一项要求。非主线程上的观察对象增加会导致难以在运行时捕获崩溃。对于您自己的组件拥有的LifecycleRegistry对象,您可以通过使用LifecycleRegistry.createUnsafe(...)明确停止检查,但之后您必须确保从其他线程访问LifecycleRegistry时,系统会进行适当的同步。
- LifecycleRegistry 现在强制将
- 生命周期状态和事件辅助程序:向
Lifecycle.Event添加了downFrom(State)、downTo(State)、upFrom(State)、upTo(State)的静态辅助方法,以便在生成Event时提供State和过渡方向。添加了getTargetState()方法,该方法会提供 Lifecycle 在Event结束后将直接过渡到的State。 withStateAtLeast:添加了Lifecycle.withStateAtLeastAPI,这些 API 会等待某个生命周期状态,并在状态发生变化时同步运行非挂起代码块,然后继续执行结果。这些 API 与现有的when*方法不同,因为它们不允许运行暂停代码,且不使用自定义调度程序。(aosp/1326081)ViewTreeAPI:新的ViewTreeLifecycleOwner.get(View)和ViewTreeViewModelStoreOwner.get(View)API 允许您根据View实例分别检索包含的LifecycleOwner和ViewModelStoreOwner。您必须升级到 Activity1.2.0和 Fragment1.3.0以及 AppCompat 1.3.0-alpha01 或更高版本,才能正确填充此 API。findViewTreeLifecycleOwner和findViewTreeViewModelStoreOwnerKotlin 扩展分别在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 中包含这些提交内容。
bug 修复
- 现在,在保存状态前后,
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)
bug 修复
- 升级 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 中包含这些提交内容。
bug 修复
- 修复了
NullSafeMutableLiveDataLint 检查中出现崩溃的问题。(aosp/1395367)
版本 2.3.0-alpha06
2020 年 7 月 22 日
发布了 androidx.lifecycle:lifecycle-*:2.3.0-alpha06。版本 2.3.0-alpha06 中包含这些提交内容。
新功能
- 向
Lifecycle.Event添加了downFrom(State)、downTo(State)、upFrom(State)、upTo(State)的静态辅助方法,以便在生成Event时提供State和过渡方向。添加了getTargetState()方法,该方法会提供 Lifecycle 在Event结束后将直接过渡到的State。(I00887) - 添加了
Lifecycle.withStateAtLeastAPI,这些 API 会等待某个生命周期状态,并在状态发生变化时同步运行非挂起代码块,然后继续执行结果。这些 API 与现有的when*方法不同,因为它们不允许运行暂停代码,且不使用自定义调度程序。(aosp/1326081)
行为变更
- LifecycleRegistry 现在强制将
DESTROYED作为终止状态。(I00887) LifecycleRegistry现在会验证其方法是否在主线程上调用。它始终是 activity、fragment 等的生命周期的一项要求。非主线程上的观察对象增加会导致难以在运行时捕获崩溃。对于您自己的组件拥有的LifecycleRegistry对象,您可以通过使用LifecycleRegistry.createUnsafe(...)明确停止检查,但之后您必须确保从其他线程访问LifecycleRegistry时,系统会进行适当的同步(Ie7280、b/137392809)
bug 修复
- 修复了
NullSafeMutableLiveData中发生崩溃的问题。(b/159987480) - 修复了与
lifecycle-livedata-core-ktx(特别是NullSafeMutableLiveData)捆绑在一起的 Lint 检查的ObsoleteLintCustomCheck。(b/158699265)
版本 2.3.0-alpha05
2020 年 6 月 24 日
发布了 androidx.lifecycle:lifecycle-*:2.3.0-alpha05。版本 2.3.0-alpha05 中包含这些提交内容。
bug 修复
LiveData现在可以更好地处理可重入情形,避免重复调用onActive()或onInactive()。(b/157840298)- 修复了使用 Android Studio 4.1 Canary 6 或更高版本时 Lint 检查无法运行的问题。(aosp/1331903)
版本 2.3.0-alpha04
2020 年 6 月 10 日
发布了 androidx.lifecycle:lifecycle-*:2.3.0-alpha04。版本 2.3.0-alpha04 中包含这些提交内容。
bug 修复
- 修复了
NonNullableMutableLiveDataLint 检查中出现崩溃的问题。(b/157294666) NonNullableMutableLiveDataLint 检查现在涵盖了满足以下条件的更多用例:使用非 null 类型参数在MutableLiveData上设置null值。(b/156002218)
版本 2.3.0-alpha03
2020 年 5 月 20 日
发布了 androidx.lifecycle:lifecycle-*:2.3.0-alpha03。版本 2.3.0-alpha03 中包含这些提交内容。
新功能
SavedStateHandle现在允许您针对指定键调用setSavedStateProvider()以支持延迟序列化,从而提供SavedStateProvider,该方法会在SavedStateHandle被要求保存其状态时获得对saveState()的回调。(b/155106862)- 新的
ViewTreeViewModelStoreOwner.get(View)API 允许您根据View实例检索包含的ViewModelStoreOwner。您必须升级到 Activity1.2.0-alpha05、Fragment1.3.0-alpha05和 AppCompat1.3.0-alpha01,才能正确填充此 API。已向lifecycle-viewmodel-ktx添加了findViewModelStoreOwner()Kotlin 扩展。(aosp/1295522)
bug 修复
- 修复了导致 Lifecycle
2.3.0-alpha01中发布的MutableLiveDataLint 检查无法与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)
bug 修复
- 通过避免在 API 级别为 28 及更低的设备上类验证失败,提高了冷启动性能。(aosp/1282118)
版本 2.3.0-alpha01
2020 年 3 月 4 日
发布了 androidx.lifecycle:lifecycle-*:2.3.0-alpha01。版本 2.3.0-alpha01 中包含这些提交内容。
新功能
- 新的
ViewTreeLifecycleOwner.get(View)API 允许您根据View实例检索包含的LifecycleOwner。您必须升级到 Activity1.2.0-alpha01和 Fragment1.3.0-alpha01,才能正确填充此 API。lifecycle-runtime-ktx中提供了findViewTreeLifecycleOwnerKotlin 扩展。(aosp/1182361、aosp/1182956) - 添加了新的 Lint 检查,可在您为 Kotlin 中定义为非 null 的
MutableLiveData设置null值时发出警告。此检查在使用livedata-core-ktx或livedata-ktx工件时可用。(aosp/1154723、aosp/1159092) - 发布了新的
lifecycle-runtime-testing工件,该工件提供可实现LifecycleOwner的TestLifecycleOwner,以及线程安全的可变Lifecycle。(aosp/1242438)
bug 修复
lifecycle-runtime工件现在拥有唯一的软件包名称。(aosp/1187196)
版本 2.2.0
ViewModel-Savedstate 版本 2.2.0
2020 年 2 月 5 日
发布了 androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0。版本 2.2.0 中包含这些提交内容。
Lifecycle ViewModel SavedState 现在与其他 Lifecycle 工件共用同一版本。2.2.0 的行为与 1.0.0 的行为相同。
版本 2.2.0
2020 年 1 月 22 日
发布了 androidx.lifecycle:lifecycle-*:2.2.0。版本 2.2.0 中包含这些提交内容。
自 2.1.0 以来的重要变更
- Lifecycle 协程集成:新的
lifecycle-runtime-ktx工件实现了 Lifecycle 协程与 Kotlin 协程之间的集成。此外,我们还扩展了lifecycle-livedata-ktx以便利用协程的优势。如需了解详情,请参阅将 Kotlin 协程与架构组件一起使用。 - 废弃
ViewModelProviders.of():已废弃ViewModelProviders.of()。您可以将Fragment或FragmentActivity传递给新的ViewModelProvider(ViewModelStoreOwner)构造函数,以便在使用 Fragment1.2.0时实现相同的功能。 - 废弃
lifecycle-extensions制品:随着上方所述的ViewModelProviders.of()废弃,此版本标志着废弃了lifecycle-extensions中的最后一个 API,因此现在该制品已完全被废弃。我们强烈建议依赖于您需要的特定 Lifecycle 制品(例如,如果您使用的是LifecycleService,则依赖于lifecycle-service;如果您使用的是ProcessLifecycleOwner,则依赖于lifecycle-process)而不是lifecycle-extensions,因为将来不会有lifecycle-extensions的2.3.0版本。 - Gradle 增量注释处理器:默认情况下,Lifecycle 的注释处理器是增量注释处理器。如果您的应用是用 Java 8 编程语言编写的,您可以使用
DefautLifecycleObserver;如果是用 Java 7 编程语言编写的,您可以使用LifecycleEventObserver。
版本 2.2.0-rc03
2019 年 12 月 4 日
发布了 androidx.lifecycle:lifecycle-*:2.2.0-rc03。版本 2.2.0-rc03 中包含这些提交内容。
bug 修复
- 修复了在
ViewModelStore中存储模拟ViewModel而后以默认出厂设置查询它时出现的错误。 - 修复了在
launchWhenCreated以及类似方法(将在相应生命周期事件中同步调用)中使用Dispatchers.Main.immediate的问题。(aosp/1156203)
外部贡献
- 非常感谢 Anders Järleberg 为修复问题所做的贡献!(aosp/1156203)
- 感谢 Jetbrains 的 Vsevolod Tolstopyatov 审核内嵌执行的实现。
依赖项变更
- Lifecycle Extensions 现在依赖于 Fragment
1.2.0-rc03。
版本 2.2.0-rc02
2019 年 11 月 7 日
发布了 androidx.lifecycle:lifecycle-*:2.2.0-rc02。版本 2.2.0-rc02 中包含这些提交内容。
bug 修复
- 修复了库的 proguard 设置中的 bug,在目标 API 低于 29 的情况下,该 bug 会影响运行 API 28 以上级别的设备。(b/142778206)
版本 2.2.0-rc01
2019 年 10 月 23 日
发布了 androidx.lifecycle:lifecycle-*:2.2.0-rc01。版本 2.2.0-rc01 中包含这些提交内容。
bug 修复
- 修复了
launchWhenCreated和相关方法由于使用Dispatchers.Main而不使用Dispatchers.Main.immediate导致比关联生命周期方法晚一帧运行的问题。(aosp/1145596)
外部贡献
- 非常感谢 Nicklas Ansman 为修复此问题所做出的贡献!(aosp/1145596)
版本 2.2.0-beta01
2019 年 10 月 9 日
发布了 androidx.lifecycle:lifecycle-*:2.2.0-beta01。版本 2.2.0-beta01 中包含这些提交内容。
bug 修复
- 修复了 Lifecycle 2.2.0-alpha05 中引入的
ProcessLifecycleOwner顺序以及 Activity 的LifecycleOwner在 Android 10 设备上迁移到启动和恢复状态的回归问题。(aosp/1128132) - 修复了 Lifecycle
2.2.0-alpha05中引入的在使用2.0.0或2.1.0版lifecycle-process时会导致NullPointerException的回归问题。(b/141536990)
版本 2.2.0-alpha05
2019 年 9 月 18 日
发布了 androidx.lifecycle:lifecycle-*:2.2.0-alpha05。版本 2.2.0-alpha05 中包含这些提交内容。
bug 修复
- 修复了协程 LiveData 构建器中的竞态条件问题。b/140249349
版本 2.2.0-alpha04
2019 年 9 月 5 日
发布了 androidx.lifecycle:lifecycle-*:2.2.0-alpha04。点击此处可查看此版本中包含的提交内容。
新功能
- 现在,
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类的构造函数以及 Fragment 默认提供的工厂中接收此对象,并且 AppCompatActivity 会自动注入SavedStateHandle。 - 添加了 AbstractSavedStateViewModelFactory。它允许您为
ViewModel创建自定义工厂,并向其提供SavedStateHandle访问权限。
ViewModel-Savedstate 版本 1.0.0-rc03
2019 年 12 月 4 日
发布了 androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03。版本 1.0.0-rc03 中包含这些提交内容。
依赖项变更
- Lifecycle ViewModel SavedState 现在依赖于 Lifecycle
2.2.0-rc03。
Viewmodel-Savedstate 版本 1.0.0-rc02
2019 年 11 月 7 日
发布了 androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc02。版本 1.0.0-rc02 中包含这些提交内容。
依赖项变更
- 现在依赖于 Lifecycle
2.2.0-rc02。
ViewModel-SavedState 版本 1.0.0-rc01
2019 年 10 月 23 日
发布了 androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01,该版本与 1.0.0-beta01 相比没有变化。版本 1.0.0-rc01 中包含这些提交内容。
ViewModel-Savedstate 版本 1.0.0-beta01
2019 年 10 月 9 日
发布了 androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01。版本 1.0.0-beta01 中包含这些提交内容。
bug 修复
- 修复了在
Activity.onActivityResult()中首次访问 SavedState ViewModel 将导致IllegalStateException的问题。(b/139093676) - 修复了使用
AbstractSavedStateViewModelFactory时的IllegalStateException。(b/141225984)
ViewModel-SavedState 版本 1.0.0-alpha05
2019 年 9 月 18 日
发布了 androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha05。版本 1.0.0-alpha05 中包含这些提交内容。
API 变更
SavedStateViewModelFactory不再扩展AbstractSavedStateViewModelFactory,且SavedStateHandle仅为请求拥有它的 ViewModel 而创建 (aosp/1113593)
ViewModel-SavedState 版本 1.0.0-alpha03
2019 年 8 月 7 日
发布了 androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03。点击此处可查看此版本中包含的提交内容。
重大变更
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可为 savedstate 做出贡献。为此,您可以使用新引入的 ViewModel 的出厂SavedStateVMFactory,并且 ViewModel 应该具有一个可接收SavedStateHandle对象作为参数的构造函数。
版本 2.1.0
自 2.0.0 以来的重要变更
- 添加了
LifecycleEventObserver,用于应对需要生命周期事件流的情况。它是一个公共 API,而不是隐藏的GenericLifecycleObserver类。 - 为
LiveData.observe方法和Transformations.*方法添加了 ktx 扩展。 - 添加了
Transformations.distinctUntilChanged,它可以创建一个新的 LiveData 对象,该对象会在源LiveData值发生更改后发出一个值。 - 通过添加扩展属性
ViewModel.viewModelScope在 ViewModel 中添加了协程支持。
版本 2.1.0
2019 年 9 月 5 日
发布了 androidx.lifecycle:lifecycle-*:2.1.0。点击此处可查看此版本中包含的提交内容。
版本 2.1.0-rc01
2019 年 7 月 2 日
发布了 androidx.lifecycle:*:2.1.0-rc01,该版本与 androidx.lifecycle:*:2.1.0-beta01 相比没有变化。点击此处可查看此版本中包含的提交内容。
版本 2.1.0-beta01
2019 年 5 月 7 日
发布了 androidx.lifecycle:*:2.1.0-beta01。点击此处可查看此版本中包含的提交内容。
新功能
- Lifecycle 已升级为测试版:在以前的 Alpha 版中引入的 API(例如用于转换和观察的
liveData扩展函数以及使用属性委托的ViewModel初始化等)已达到稳定状态,不会发生变化。
版本 2.1.0-alpha04
2019 年 4 月 3 日
发布了 androidx.lifecycle:*:2.1.0-alpha04。点击此处可查看此版本中包含的提交内容。
API 变更
- 重大变更:
by viewModels()和by activityViewModels()后的底层 API 已进行了更改,以直接支持ViewModelStore,而不是仅支持ViewModelStoreOwner。(aosp/932932)
版本 2.1.0-alpha03
2019 年 3 月 13 日
发布了 androidx.lifecycle:*:2.1.0-alpha03。点击此处可查看此版本中包含的完整提交内容列表。
API 变更
- 已移除
ViewModelProvider.KeyedFactory。除了ViewModelProvider.Factory之外,第二个接口也会因by viewmodels {}Kotlin 属性委托而无法与新功能完美搭配使用。(aosp/914133)
版本 2.1.0-alpha02
2019 年 1 月 30 日
发布了 androidx.lifecycle 2.1.0-alpha02。
API 变更
LifecycleRegistry现在包含setCurrentState()方法,用于替换现已废弃的setState()方法。(aosp/880715)
bug 修复
- 修复了在所在的
ViewModelStore被清除时模拟ViewModel实例发生崩溃的问题。b/122273087
版本 2.1.0-alpha01
2018 年 12 月 17 日
发布了 androidx.lifecycle 2.1.0-alpha01。
新功能
- 添加了
LifecycleEventObserver,用于应对需要生命周期事件流的情况。它是一个公共 API,而不是隐藏的GenericLifecycleObserver类。 - 为
LiveData.observe方法和Transformations.*方法添加了 ktx 扩展。 - 添加了
Transformations.distinctUntilChanged方法。它可以创建一个新的LiveData对象,该对象会在源 LiveData 值发生更改后发出一个值。 - 在 ViewModel 中添加了协程支持:添加了
ViewModel.viewModelScope扩展属性。 - 添加了
ViewModelProvider.KeyedFactory,它是 ViewModel 的出厂设置,可接收create方法中的key和Class。
版本 2.0.0
版本 2.0.0
2018 年 9 月 21 日
发布了 Lifecycle 2.0.0,与 2.0.0-rc01 相比,该版本修复了 ViewModel 中的一个 bug。
bug 修复
- 修复了错误地移除了构造函数的 ViewModel ProGuard 规则 b/112230489
版本 2.0.0-beta01
2018 年 7 月 2 日
bug 修复
- 修复了 LifecycleObserver ProGuard 规则以仅保留实现而不保留子接口 b/71389427
- 修复了 ViewModel ProGuard 规则以允许混淆和压缩
AndroidX 之前的版本
对于 AndroidX 之前的 Lifecycle 版本,请添加以下依赖项:
dependencies {
def lifecycle_version = "1.1.1"
// ViewModel and LiveData
implementation "android.arch.lifecycle:extensions:$lifecycle_version"
// alternatively - just ViewModel
implementation "android.arch.lifecycle:viewmodel:$lifecycle_version" // For Kotlin use viewmodel-ktx
// alternatively - just LiveData
implementation "android.arch.lifecycle:livedata:$lifecycle_version"
// alternatively - Lifecycles only (no ViewModel or LiveData).
// Support library depends on this lightweight import
implementation "android.arch.lifecycle:runtime:$lifecycle_version"
annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version" // For Kotlin use kapt instead of annotationProcessor
// alternately - if using Java8, use the following instead of compiler
implementation "android.arch.lifecycle:common-java8:$lifecycle_version"
// optional - ReactiveStreams support for LiveData
implementation "android.arch.lifecycle:reactivestreams:$lifecycle_version"
// optional - Test helpers for LiveData
testImplementation "android.arch.core:core-testing:$lifecycle_version"
}
版本 1.1.1
2018 年 3 月 21 日
只有一项小的变更:android.arch.core.util.Function 已从 arch:runtime 移至 arch:common。这样,便可以在没有运行时依赖项的情况下使用它,例如在下面的 paging:common 中。
lifecycle:common 是 lifecycle:runtime 的依赖项,所以此变更不会直接影响 lifecycle:runtime,而只会影响像 Paging 一样直接依赖于 lifecycle:common 的模块。
版本 1.1.0
2018 年 1 月 22 日
打包变更
现在可使用小得多的新增依赖项:
android.arch.lifecycle:livedata:1.1.0android.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。