活动中add观测者的具体步骤就不说了,主要说一下在实现Observer接口中方法调用的区别(实现的效果相同)。
//首先实现你想实现的接口
class AdvertisingManage : xxxObserver {
1.LifecycleObserver
class AdvertisingManage : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun start(){
Log.d(TAG, "开始计时")
countDownTimer?.start()
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun onCancel(){
Log.d(TAG, "停止计时")
countDownTimer?.cancel()
countDownTimer = null
}
实现此接口时会使用注解的方式来调用方法,但是因为注解会使用反射等操作,官方并不建议这么做,对注解进行了废弃。作为资深强迫症患者很难接受横杠的出现,故使用第二种方法。
2.DefaultLifecycleObserver
这个方法不使用注解,而是通过重写方法来区分在某个生命周期中执行什么逻辑,更加直观。下面看代码:
class AdvertisingManage : DefaultLifecycleObserver {
override fun onCreate(owner: LifecycleOwner) {
super.onCreate(owner)
start()
}
override fun onDestroy(owner: LifecycleOwner) {
super.onDestroy(owner)
onCancel()
}
这里的start()和onCancel()方法就是上一条LifecycleObserver中我定义的方法,这里图省事直接调用过来了。
虽然注解的方式也非常简便,但我认为还是以官方推荐为准,所以使用声明DefaultLifecycleObserver接口并重写的方式更加妥当。



