简介
这一段比较火的RxJava在项目上使用,MVVM+RxJava,使用RxJava的时候是在ViewModel中处理异步的状态回调,往往是一个界面针对一个ViewModel,会出现一类情况,两个View其实是对一个状态进行监听,即两个ViewModel里都监听一个状态,监听该状态是用RxJava。
项目场景
在开发Android ROM时,对SystemUI进行定制化修改StatusBar和NavigationBar,使用MVVM时,就有StatusBarViewModel和NavigationbarViewModel来处理两个View对应的业务。需求蓝牙的状态不仅在StatusBar上有对应icon状态的显示,同时在Navigationbar上也有对应状态控制显示。
实际现象是当蓝牙状态变化时,只有NavigationBar的变化,而StatusBar永远收不到状态变化的消息
原因分析
在开发的过程中通过RxJava来实现对蓝牙状态的监听回调
对Rxjava进行了一次封装,即所有的ViewModel都通过一个方法调用蓝牙状态的监听,然后emitter会赋值成最后一次调用的,那么谁是最后调用的,谁就能获取到数据,前面调用的的emitter会被覆盖掉
解决方法
创建一个
private ArrayList<ObservableEmitter> mEmitterList = new ArrayList();
在Observable.create的时候,把emitter加入到数组中,当有回调的时候遍历数组,依次执行onNext方法

本文探讨了在Android开发中使用RxJava结合MVVM架构时遇到的问题,特别是在两个ViewModel(StatusBarViewModel和NavigationbarViewModel)同时监听蓝牙状态时,出现了一个ViewModel无法接收到状态更新的情况。文章详细分析了问题原因,并提出了解决方案,即通过创建emitter列表并在状态变化时遍历执行所有emitter,确保所有监听者都能收到状态更新。
861

被折叠的 条评论
为什么被折叠?



