RxJava踩坑记录之Android App

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

RxJava踩坑记录之Android App

简介

这一段比较火的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方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值