我的使用案例是使用Snackbar在Android应用中显示通知。我一次只能显示一个通知,所以我使用的是onBackpressureBuffer,只在Snackbar被解除时才请求下一个项目。这很好用,但如果缓冲区溢出,我希望有一个冷静期,这样我们就不会有一个持续的通知流。换句话说,当缓冲区溢出时,跳过新的发射一段时间。
到目前为止,我有类似的东西
observable
.onBackpressureBuffer(
bufferSize,
() -> { /* start cool-off time here */ },
BackpressureOverflow.ON_OVERFLOW_DROP_LATEST)
.subscribe(new Subscriber() {
void onStart() {
request(1);
}
void onNext(item) {
snackBar = createSnackbar(item);
snackBar.setCallback((sb, event) -> { request(1) }
snackbar.show();
}
});
在OperatorOnBackpressureBuffer的onOverflow操作中,我想以某种方式开始冷静期。
似乎我想要一些背压缓冲区和throttleWithTimeout或跳过的组合。我希望我可以通过一个新的BackpressureOverflow.Strategy实现这一目标,但这似乎没有提供太大的灵活性。有没有一种简单的方法可以按我想要的方式组合这些?
谢谢!