生命周期感知组件概述
了解生命周期感知组件及其最佳使用实践。
简介
Android UI 控制器(如 Activity 和 Fragment)具有明确的生命周期,其关联的事件会在 UI 控制器的生命周期过程中被触发。在开发应用时,通常需要在这些生命周期中执行依赖服务和组件的相关操作。随着时间推移,这类代码会变得杂乱且难以维护。
最近,Google 推出了 AndroidX Lifecycle 库来解决这一问题。该库提供了一系列接口,可用于构建能够根据父级 UI 控制器状态变化而调整行为的组件。
在本节课中,我们将学习构建生命周期感知组件的一些关键概念。
生命周期观察者
任何 UI 组件的生命周期都由事件和状态组成。
- 事件 指的是 Android 框架在组件生命周期过程中发出的回调方法。例如,当一个 Activity 被创建时,会触发
onCreate事件回调;当 Activity 被暂停时,会触发onPause事件回调。 - 状态 指的是组件在其生命周期中可能处于的不同状态。例如,一个 Activity 可能处于初始化、暂停或销毁状态。
了解了这些概念后,我们来学习如何定义一个生命周期观察者。可以通过实现 DefaultLifecycleObserver 接口,在类中重写生命周期事件。例如,假设我们有一个计数器组件,其值可以递增或递减。我们希望每当父级 UI 组件被暂停时,就重置计数器。为此,可以在类中重写 onPause 方法。
1import androidx.lifecycle.DefaultLifecycleObserver 2import androidx.lifecycle.LifecycleOwner 3 4class CounterLifecycleObserver : DefaultLifecycleObserver { 5 private var myCounter = 0 6 7 override fun onPause(owner: LifecycleOwner) { 8 myCounter = 0 9 super.onPause(owner) 10 } 11 12 fun incrementCounter() { 13 myCounter++ 14 } 15 16 fun decrementCounter() { 17 myCounter-- 18 } 19 20 fun getCounter(): Int { 21 return myCounter 22 } 23}
我们将在学习了生命周期所有者之后,使用上面定义的生命周期观察者。
生命周期所有者
生命周期所有者指的是拥有生命周期的类。例如,Activity 和 Fragment 都是生命周期所有者。一个类若要成为生命周期所有者,需实现包含 getLifecycle() 方法的 LifecycleOwner 接口。由于 Activity 和 Fragment 已经实现了 LifecycleOwner 接口,因此它们的生命周期可以被生命周期观察者监听。在上一节中,我们定义了 CounterLifecycleObserver 类,它实现了 DefaultLifecycleObserver 接口,可以用于 LifecycleOwner 类中。
接下来,我们将在一个 Activity 中注册 CounterLifecycleObserver 观察者。
1class MainActivity : AppCompatActivity() { 2 3 private lateinit var myCounterLifecycleObserver: CounterLifecycleObserver 4 5 override fun onCreate(savedInstanceState: Bundle?) { 6 super.onCreate(savedInstanceState) 7 setContentView(R.layout.activity_module_6_lesson_1_view_model) 8 9 myCounterLifecycleObserver = CounterLifecycleObserver() 10 this.lifecycle.addObserver(myCounterLifecycleObserver) 11 } 12}
现在,我们已在 Activity 中注册了 CounterLifecycleObserver,该组件将能够感知 Activity 的生命周期变化,并据此采取相应行动。
示例应用
尝试运行使用 CounterLifecycleObserver 的示例应用,它在 MainActivity 中进行了应用。
注意:当 Activity 被暂停时,CounterLifecycleObserver 会将计数器重置为零。在上述示例中,当我们最小化应用并返回 Activity 时,会发现计数器已被重置为零。
总结
在本节课中,我们学习了生命周期、生命周期观察者和生命周期所有者。AndroidX Lifecycle 库提供的这些接口使我们能够构建生命周期感知组件。使用生命周期感知组件可以让代码更加清晰易管理,同时让每个组件能够在同一类中自行处理生命周期事件。