作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在 Android 上试验 RxJava,在尝试将 AmbWith 运算符与两个 Observable 一起使用时遇到了问题。
正如我在此处的 amb 定义中所理解的 http://reactivex.io/documentation/operators/amb.html
只有第一个发送通知的 Observable 被接受,其余的被忽略和丢弃。
我连接了两个 Observable,一个进行网络调用(带有改造)另一个用内存中的数据响应。
代码如下:
retrofitService.loadInfo()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
//the observable here returns an item from in memory and should be observed on the ui thread
.ambWith(observable.subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()))
.subscribe(action);
现在的问题是,如果第二个 observable 首先发出一个项目(这很可能)第一个 observable 被取消。如果网络服务已经启动,这会导致 NetworkOnMainThread。
如果我删除
它工作正常 .observeOn(AndroidSchedulers.mainThread()
对于第二个 Observable,但我需要在 ui 中显示结果。
我的猜测是,amb 运算符在主线程上执行,而取消操作以某种方式在主线程中结束。
我错过了什么吗?有人知道如何解决这个问题吗?
感谢任何帮助。
最佳答案
您的 observeOn 仅影响原始 Observable,因此,我认为这可能会有所帮助:
retrofitService.loadInfo()
.subscribeOn(Schedulers.newThread())
.ambWith(observable.subscribeOn(Schedulers.newThread()))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(action);
现在,所有结果都将在主线程中。检查一下。
关于android - RxJava Android AmbWith 运算符导致 NetworkOnMainThread 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33435862/
我目前正在 Android 上试验 RxJava,在尝试将 AmbWith 运算符与两个 Observable 一起使用时遇到了问题。 正如我在此处的 amb 定义中所理解的 http://react
我是一名优秀的程序员,十分优秀!