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

相关推荐
黄林晴几秒前
Android内核引入AuroFDO,你的App变快了
android
IT痴者6 分钟前
Kotlin 开发注意事项(Android Java 开发者转型指南)
android·java·kotlin
Kapaseker11 分钟前
你可能还不知道 Compose Pager 有多强大
android·kotlin
阿捏利11 分钟前
vscode+jadx-mcp-server配置及使用
android·apk·逆向·mcp·jadx
程知农25 分钟前
Android的配置笔记
android·笔记
幸福在路上wellbeing31 分钟前
Android 程序员 常用的AI工具有哪些
android·人工智能
阿拉斯攀登32 分钟前
【RK3576 安卓 JNI/NDK 系列 03】JNI 核心语法(上):数据类型映射与方法调用
android·安卓ndk入门·jni方法签名·java调用c++·rk3576底层开发
XerCis39 分钟前
安卓手机搭建Samba服务器SMB
android·服务器·智能手机
studyForMokey40 分钟前
【Android面试】Context专题
android·面试·职场和发展
三少爷的鞋12 小时前
从 MVVM 到 MVI:为什么说 MVVM 的 UI 状态像“网”,而 MVI 像“一条线”?
android