本文主要是介绍EventBus搭配LifeCycle可能更美味,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
简要介绍
EventBus:一个用来在组件之间发通知通信的开源库。
LifeCycle:JetPack库中一个能感知生命周期的组件。
Kotlin扩展函数:可以为已经存在的类添加新的方法的黑魔法。
解决的问题
在使用EventBus
时,我们每次在需要接受通知的地方,都需要注册
和解绑
监听函数。类似下面的模板代码:
@Override
protected void onStart() {super.onStart();EventBus.getDefault().register(this);
}@Override
protected void onStop() {super.onStop();EventBus.getDefault().unregister(this);
}
如果忘记了unregister
函数,可能就会造成内存泄露
,空指针
等奇怪问题。当这个类不需要通知监听时,删除也挺麻烦的。所以很多人可能投向了LiveDataBus
的怀抱。
那么将EventBus
和LifeCycle
搭配上了,注册函数可以怎么写呢?
//Activity|Fragment,所有实现了LifecycleOwner的类
EventBus.getDefault().registerOnStart(this);
这就简单多了,对吧!有点LiveDataBus
那味了。上面的函数会在onStart
生命周期函数中自动注册
EventBus监听,并在onStop
生命周期函数中自动解绑
监听。
可用方法
//生命周期注册监听
EventBus.getDefault().registerOnStart(lifecycleOwner);
EventBus.getDefault().registerOnStart(lifecycleOwner);
EventBus.getDefault().registerOnStart(lifecycleOwner);
//安全调用注册/解绑
EventBus.getDefault().safeRegister(obj);
EventBus.getDefault().safeUnregister(obj);
实现思路
给EventBus添加扩展函数
/*** 在onCreate中注册事件,自动在onDestroy中注销事件*/
fun <span><span><span><</span>T</span> <span>:</span> <span>LifecycleOwner</span><span>></span></span> EventBus.registerOnCreate(owner: T) {if (this.isRegistered(owner)) returnowner.lifecycle.addObserver(OnCreateLifecycleObserver(this, owner))
}
实现OnCreateLifecycleObserver
class OnCreateLifecycleObserver<span><span><span><</span>T</span><span>></span></span>(private val eventBus: EventBus,private val owner: T
) : LifecycleObserver {}
在对应的生命周期函数中添加注册\解绑
函数
class OnCreateLifecycleObserver<span><span><span><</span>T</span><span>></span></span>(private val eventBus: EventBus,private val owner: T
) : LifecycleObserver {@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)fun onCreate() {if (eventBus.isRegistered(owner)) returneventBus.register(owner)}@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)fun onDestroy() {if (!eventBus.isRegistered(owner)) returneventBus.unregister(owner)}
}
LifeCycle
不怎么会的可以直接看官方文档,使用还是蛮简单。
其他生命周期实现类似,具体可看源码实现。
源码
https://github.com/simplepeng/NiceKTX
这篇关于EventBus搭配LifeCycle可能更美味的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!