LifeCycle可以让本没有生命周期的对象通过实现LifecycleObserver或DefaultLifecycleObserver接口后也具有生命周期的特性
使用
假设这样一个场景,页面上有一个一直执行的动画,页面切换时动画停止,页面恢复时动画开始来优化动画,页面销毁时动画结束,正常可以在onpause 和 onResume 处理回调,我们也可以让他继承LifecycleObsever在自己的生命周期内处理该逻辑,实现动画的封装,不用手动调用结束方法
导入依赖
implementation "androidx.lifecycle:lifecycle-common-java8:2.2.0"
实现DefaultLifecycleObserver接口
class MyAnim(val animation:ObjectAnimator?): DefaultLifecycleObserver
这里因为ObjectAnimation
不能继承所以从外侧传入一个实例
在生命周期回调中写入逻辑
override fun onResume(owner: LifecycleOwner) {
super.onResume(owner)
if(canStartAnimator){
Log.i("test","restar anim")
animation?.resume()
}
}
override fun onStop(owner: LifecycleOwner) {
super.onStop(owner)
Log.i("test","stop anim")
animation?.pause()
}
override fun onDestroy(owner: LifecycleOwner) {
super.onDestroy(owner)
animation?.let {
it.end()
it.cancel()
}
}
与页面生命周期建立连接
lifecycle.addObserver(anim)
这样一个带有生命周期的动画就实现好了