关于 mLastVersion 疑问
来源:9-1 LiveData优雅的实现事件总线【难点】

慕慕6500093
2022-11-27
if (mLastVersion >= mLiveData.mVersion) {
if (mSticky && mLiveData.mStickyData != null) {
mObserver.onChanged(mLiveData.mStickyData);
}
return;
}
这里我的理解是:原来包装过的liveData已经发射给了所有已注册的observe(因为包装过的liveData的发射次数至少等于我们自己记录的次数), 如果再来新的observer,那么判断下是否为粘性事件,如果是粘性事件则处理,反之不处理。
mLastVersion = mLiveData.mVersion;// 记录包装过的liveData的发射次数
mObserver.onChanged(t);
疑问:尽管mVersion和mLastVersion是我们自己定义的,但我认为mLastVersion只会小于或等于mLiveData.mVersion,而不会出现mLastVersion大于mLiveData.mVersion的情况,因为mLiveData.mVersion只要调用setValue/postValue发射就会立即+1更新,而mLastVersion也仅仅是通过mLiveData.mVersion赋值才会更新。?
另外,LiveDataBus 通过过滤事件名拿到对应的包装过的livedata,然后注册observer,似乎少了一步反注册removeObserver流程?
写回答
1回答
-
LovelyChubby
2022-11-28
LiveDataBus监听了宿主的onDestory事件,进行了反注册。对使用方更为友好012022-11-28
相似问题