关于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掉)

相关推荐
木易 士心19 分钟前
深度解析 Android 音频焦点处理与实战开发
android·音视频
祉猷并茂,雯华若锦1 小时前
Appium 3.x安卓APP企业级安装实战
android·appium
微露清风2 小时前
浅析 MySQL 索引
android·数据库·mysql
91刘仁德2 小时前
MySQL 数据类型详解
android·笔记·mysql·adb
编程圈子4 小时前
操作系统学习14 IDT + PIC + 键盘中断
android·学习·计算机外设
齊家治國平天下11 小时前
Android 14 Vehicle HAL (VHAL) 设计与实现深度解析
android·aaos·carservice·车载开发·android 14·vhal·vehicle hal
AFinalStone16 小时前
Android 7系统网络(八)应用API层—ConnectivityManager使用与实战调试
android·网络
plainGeekDev17 小时前
kapt 替换为 KSP
android·java·kotlin
蜡台17 小时前
通过Gradle脚本声明更改Java变量
android·java·开发语言·python·kotlin·gradle·groovy
阿pin21 小时前
Android随笔-SharedPreferences
android·sp