Loading... ## 简介 在一个简单应用中,你可以很简单的在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接口 ```kotlin class DessertTimer(lifecycle: Lifecycle) : LifecycleObserver { ... fun startTimer(){ } fun stopTimer(){ } ``` #### 2. 在方法上方添加生命周期标记 @onLifecycleEvent(Lifecycle.Event.******) 可以看到,这里使用到Lifecycle类。 ```kotlin class DessertTimer(lifecycle: Lifecycle) : LifecycleObserver { ... @OnLifecycleEvent(Lifecycle.Event.ON_START) fun startTimer(){ } @OnLifecycleEvent(Lifecycle.Event.ON_STOP) fun stopTimer(){ } ``` #### 3. 在生命周期拥有者如何使用组件 每个生命周期观察者组件的初始化,要接收当前生命周期拥有者的生命周期状态。 ```kotlin dessertTimer = DessertTimer(this.lifecycle) ``` 最后修改:2020 年 06 月 03 日 09 : 17 AM © 允许规范转载