关于MediatorLiveData observe收不到回调

在一次编码中发现MediatorLiveData observe收不到回调,调试过程中发现存在如下两个问题:

1.需要手动调用一下setValue/postValue

2.source中需要存在活跃的livedata

关于第一条在MediatorLiveData类中的注解上有所声明

MediatorLiveData不会自动回调,得手动setValue/postValue一下给MediatorLiveData设置的observer才能收到回调,有些状态更新不及时可能跟这个有关;

修复方法也很简单,我们只需要在代码里手动赋值即可。

但是第二条需要活跃的livedata,是指在addSource的时候会去判断,如果有活跃observer的话就插入

那么刚开始的时候MediatorLiveData什么结果都没收到,可不就是不活跃么,这不是陷入了死循环,接着往下看才发现在onActive的时候也会调用plug去插入监听

onActive是继承LiveData的方法,我们点击查看引用处发现在activeStateChanged方法中调用了onActive(从方法名上来看好像是废话),并且这个时候也会对mActiveCount做+1操作,下次再调用addSource就直接plug了

接着追过去发现跟lifecycle做了绑定,在生命周期变为start的时候触发observe的活跃状态

但是项目执行中发现还是会存在一个异常case收不到回调,于是就用了trick的方法,直接对当前的MediatorLiveData添加observeForever

kotlin 复制代码
mainHandler.postAtFrontOfQueue { mediatorLivedata.observeForever {  } }

保证不管什么情况下该MediatorLiveDatahasActiveObservers()总返回true,总是能收到回调(记得自己去remove掉)

相关推荐
普通网友4 小时前
Android Jetpack 架构组件最佳实践之“网抑云”APP
android·架构·android jetpack
普通网友4 小时前
原创_Android Jetpack Compose 最全上手指南
android·android jetpack
FDoubleman4 小时前
Android Jetpack之Compose入门(一)
android·android jetpack
普通网友4 小时前
Android Jetpack从入门到精通,干货满满
android·android jetpack
子云心4 小时前
Android Jetpack 系列(七)App Startup 启动优化
android·android jetpack·jetpack·initializer·startup·appstartup
嫩嫩的猿4 小时前
android jetpack compose Model对象更新变量 UI不更新、不刷新问题
android·ui·android jetpack
普通网友4 小时前
Android Jetpack 之 LifeCycle 组件_android 自定义view lifecycle
android·gitee·android jetpack
_codemonster4 小时前
数据库字符集编码问题
android·数据库·oracle
Pika10 小时前
深入浅出Compose HitTest 机制
android·android jetpack