【发布时间】:2015-12-13 17:05:50
【问题描述】:
我刚开始玩 RxJava/RxAndroid,在理解如何正确处理背压方面遇到了一些问题。
我有一个可观察的文件扫描器,它可以扫描目录并发出文件。应尽快处理这些文件,不要跳过任何文件。
所以管道看起来像这样:
Observable<File> -> Filter<File, Boolean> {check if file is of type .xyz}
不幸的是,我收到 rx.exceptions.MissingBackpressureException 错误。所以我读到了背压,如果我理解正确的话,损失更少的选项只是缓冲区和窗口。
我试过onBackpressureBuffer(), buffer() and window()。虽然所有onBackpressureX() 命令似乎都没有效果,但buffer() 将项目分组为List<File>。我的问题是:
- 我应该如何过滤这些组?
filter(<List<File>>, Boolean)毫无意义…… - 如何在我的文件扫描器中实现可观察的背压处理,以便它等到我的管道/操作员/订阅者有容量?
- 使用例如转换项目是一种好习惯吗?
map()进入 XYZ-Entities 并将它们存储在单独的列表中,而不是活跃的订阅者,而是作为运营商的副作用?
一些反馈甚至提示会很有帮助,我们将不胜感激。
【问题讨论】:
-
尝试使用
onBackPressureDrop() -
感谢您的建议。由于 order(?),onBackPressureX() 命令不起作用 - 请参阅我的答案。此外,一项要求是操作是无损的。
标签: java android reactive-programming rx-java rx-android