在看了美团技术团队的Android消息总线的演进之路的文章后,自己也有了些想法,于我就按自己的想法自己实现了一个基于LiveData的EventBus。接下来我会讲解我的实现思路,github实现地址: https://github.com/dtjc/LiveBus。
利用LiveData实现EventBus的好处如下:
- 能感知生命周期,也就是说不需要手动unregister
- 轻量
主要的实现在LiveBus.BusLiveData的observer()方法,代码如下:
public void observe(@NonNull LifecycleOwner owner, @NonNull Observer<T> observer) {
try {
Field versionField = LiveData.class.getDeclaredField(LIVE_DATA_VERSION_NAME);
versionField.setAccessible(true);
final int version = (Integer) versionField.get(this);
versionField.set(this,Integer.MIN_VALUE);
super.observe(owner, observer);
versionField.set(this,version);
modifyObserverWrapperV