在同一订阅中更新flatMap并发限制

时间:2015-11-04 21:26:58

标签: android reactive-programming rx-java

我有一个Android服务,当PublishSubject通过EventBus接收下载事件时下载文件,我想根据设置限制并发下载的数量。

实例化服务后,它会创建PublishSubject和以下订阅:

PublishSubject<DownloadEvent> downloadsSubject = PublishSubject.create();

Subscription downloadSubscription = downloadsSubject
                .subscribeOn(Schedulers.io())
                .filter(event -> !isDownloaded(event))
                .flatMap(this::addDownloadToQueue)
                .flatMap(this::startDownload, preferences.getDownloadThreadsNumber())
                .onBackpressureBuffer()
                .subscribe();

但是只有在订阅时才会获得设置,并且对设置的更改无效。

有没有办法为下一个队列排放更新此值(或其他方法)而无需再次订阅?

1 个答案:

答案 0 :(得分:1)

Here is一个带有自定义运算符的runnable类,它应该可以执行您想要的操作。

在这种情况下有几种竞争条件,我试图覆盖其中的大部分。操作员不协调背压,因此您可能需要onBackpressureBuffer