简介
在一个简单应用中,你可以很简单的在onStart()中开启定时器计时,在onStop()中关闭定时器计时。这里只有一个定时器,你一般不会忘记在合适的时间去关闭它。
当你的应有愈加复杂时,你可能需要在onStart()/onCreate()中初始化很多东西。然后将他们在onStop()/onDestroy()中关闭。例如,你可能有动画,英语,传感器,定时器等,你需要同时将它们初始化和卸载,开启和停止。如果你忘了其中一个,这就会造成bug。
Lifecycle library 是Android Jetpack的一部分。它可以简化上述任务。
通常,Activity或fragment告诉组件(定时器等)当它们生命周期回调发生时组件该做什么。但是,如果你使用Lifecycle library。这个组件自身就一直在观察Activity/Fragment的生命周期变化。它们会在合适的时候做它们该做的。
组成部分
在Lifecycle library中有三大组成部分。
1. 生命周期的拥有者。
Activity和Fragment是生命周期的拥有者。生命周期拥有者都实现了LifecycleOwner
接口(不需要自行实现,默认就有这个接口)。
2. Lifecycle
类
它保存生命周期所有者的实际状态,并在生命周期发生更改时触发事件。
3. 生命周期的观察者
它们是实现了一定功能的组件。它们观察生命周期状态,并在生命周期变化时执行任务。生命周期观察者需要实现LifecycleObserver
接口。
使用步骤
1. 将普通组件转化为生命周期观察者
以某自行编写的定时器类为例。
它的构造函数接收一个Lifecycle 对象。
它实现了LifecycleObserver接口
class DessertTimer(lifecycle: Lifecycle) : LifecycleObserver {
...
fun startTimer(){
}
fun stopTimer(){
}
2. 在方法上方添加生命周期标记
@onLifecycleEvent(Lifecycle.Event.)
可以看到,这里使用到Lifecycle类。
class DessertTimer(lifecycle: Lifecycle) : LifecycleObserver {
...
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun startTimer(){
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun stopTimer(){
}
3. 在生命周期拥有者如何使用组件
每个生命周期观察者组件的初始化,要接收当前生命周期拥有者的生命周期状态。
dessertTimer = DessertTimer(this.lifecycle)