Lifecycle

生命周期感知型组件可执行操作来响应另一个组件(如 Activity 和 Fragment)的生命周期状态的变化。这些组件有助于生成更有条理且往往更精简的代码,此类代码更易于维护。如需了解详情,请参阅参考文档

声明依赖项

要添加 Lifecycle 的依赖项,您必须将 Google Maven 代码库添加到项目中。有关详情,请阅读 Google 的 Maven 代码库

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

dependencies {
        def lifecycle_version = "2.1.0"

        // ViewModel and LiveData
        implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
        // alternatively - just ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version" // For Kotlin use lifecycle-viewmodel-ktx
        // alternatively - just LiveData
        implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
        // alternatively - Lifecycles only (no ViewModel or LiveData). Some UI
        //     AndroidX libraries use this lightweight import for Lifecycle
        implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version"

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

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

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

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

版本 2.2.0-alpha05

2019 年 9 月 18 日

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

问题修复

  • 修复了协程 livedata 生成工具中的竞争条件问题。b/140249349

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)

版本 2.2.0-alpha04

2019 年 9 月 5 日

发布了 androidx.lifecycle:lifecycle-*:2.2.0-alpha04。点击此处可查看此版本中包含的提交内容。

新功能

  • 现在,lifecycleScopewhenCreatedwhenStartedwhenResumedviewModelScope 以及 liveData 的底层实现均使用 Dispatchers.Main.immediate(而不是 Dispatchers.Main)。(b/139740492)

外部贡献

  • 非常感谢 Nicklas Ansman 为迁移到 Dispatchers.Main.immediate 所做出的贡献!(aosp/1106073)

版本 2.1.0

2019 年 9 月 5 日

发布了 androidx.lifecycle:lifecycle-*:2.1.0。点击此处可查看此版本中包含的提交内容。

自 2.0.0 以来的重要变更

以下变更已升级为稳定版本:

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

版本 2.2.0-alpha03

2019 年 8 月 7 日

发布了 androidx.lifecycle:lifecycle-*:2.2.0-alpha03。点击此处可查看此版本中包含的提交内容。

新功能

API 变更

  • ViewModelProviders.of() 已弃用。您可以将 FragmentFragmentActivity 传递给新的 ViewModelProvider(ViewModelStoreOwner) 构造函数以实现相同的功能。(aosp/1009889)

ViewModel-SavedState 版本 1.0.0-alpha03

2019 年 8 月 7 日

发布了 androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03。点击此处可查看此版本中包含的提交内容。

重大变更

版本 2.2.0-alpha02

2019 年 7 月 2 日

发布了 androidx.lifecycle:*:2.2.0-alpha02。点击此处可查看此版本中包含的提交内容。

API 变更

  • LiveDataScope.initialValue 替换为 LiveDataScope.latestValue,后者将跟踪 liveData 块当前发出的值。
  • 将新的过载添加到 liveData 生成工具,以接收 timeout 参数作为类型 Duration

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

版本 2.1.0-rc01

2019 年 7 月 2 日

发布了 androidx.lifecycle:*:2.1.0-rc01,该版本与 androidx.lifecycle:*:2.1.0-beta01 相比没有变化。点击此处可查看此版本中包含的提交内容。

版本 2.2.0-alpha01

2019 年 5 月 7 日

发布了 androidx.lifecycle:*:2.2.0-alpha01。点击此处可查看此版本中包含的提交内容。

新功能

  • 此版本新增了几项功能,增加了对 Lifecycle 和 LiveData 的 Kotlin 协程的支持。点击此处可查看相关的详细文档。

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

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

问题修复

  • 修复了在包含的 ViewModelStore 被清除时模拟 ViewModel 实例发生崩溃的问题。b/122273087

版本 2.1.0-alpha01

2018 年 12 月 17 日

发布了 androidx.lifecycle 2.1.0-alpha01

新功能

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

版本 2.0.0

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:commonlifecycle:runtime 的依赖项,所以此变更不会直接影响 lifecycle:runtime,而只会影响像 Paging 一样直接依赖于 lifecycle:common 的模块。

版本 1.1.0

2018 年 1 月 22 日

打包变更

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

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

API 变更

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