android - 未抛出 RxJava MissingBackpressureException
问题描述
我们在我们的 Android 应用程序中使用了大量的 RxJava1 代码。最近,我们开始得到很多东西MissingBackpressureException
。所以我试着更好地理解背压的机制。
我能够得到一个背压异常被抛出
BehaviorSubject<Integer> subject = BehaviorSubject.create();
subject
.observeOn(Schedulers.computation())
.subscribe(x -> {
try {
logger.info("got " + x);
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
for (int i = 0; true; ++i) {
logger.info("sending " + i);
subject.onNext(i);
}
太好了,我得到了 a MissingBackpressureException
,但是当我导致subscribe
动作永远不会返回时,我不再得到MissingBackpressureException
,所以这段代码:
subject
.observeOn(Schedulers.computation())
.subscribe(x -> {
while(true) {
try {
logger.info("got " + x);
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
所以我在这里有几个问题:
- 为什么我没有
MissingBackpressureException
加入第二个订阅者? - 所有对象会发生什么?我没有看到内存占用越来越大,所以我假设它们被扔掉了?为什么?
当我尝试
RxJava2
通过添加toFlowable(BackpressureStrategy.ERROR)
到订阅者来做到这一点时,在任何一种情况下我都没有遇到异常,这里发生了什么?subject .observeOn(Schedulers.computation()) .toFlowable(BackpressureStrategy.ERROR) .subscribe(x -> {
解决方案
推荐阅读
- python - JSON 格式:在 Python 中将输出显示为每行的键对值
- javascript - Lodash Debounce 发送请求而无需回调 React JS
- python - 未从网站获取网络抓取中的所有信息
- oracle - 在 ansible playbook 中运行 sqlplus 查询
- facebook - FB.UI 共享对话框在移动设备中总是返回 undefined
- mariadb - Bitnami Mariadb 码头工人群
- java - 如何以编程方式使用 uid 在 WebSphere 门户中实现 SSO 身份验证
- android - 从 HTML 和 CSS 生成 pdf
- css - 为窗格背景解析 JavaFX 时出现 CSS 错误
- javascript - Python pypeeter 不适用于 page.evaluateOnNewDocument