Rx java RxAndroid下载多个文件,最多3个并发线程

Rx java RxAndroid下载多个文件,最多3个并发线程,rx-java,rx-android,Rx Java,Rx Android,我有api从服务器下载单个mp3文件,下面使用RxJava使用 Observable<ResponseBody> observable = audioService.getFile(fileNameWithExtension); observable.subscribeOn(Schedulers.newThread()) .observeOn(Schedulers.newThread()) .subscr

我有api从服务器下载单个mp3文件,下面使用RxJava使用

Observable<ResponseBody> observable = audioService.getFile(fileNameWithExtension);
        observable.subscribeOn(Schedulers.newThread())
                .observeOn(Schedulers.newThread())
                .subscribe(someCallBackClass<ResponseBody>);

我无法理解究竟哪个线程需要observeOn()android主线程。

您可以通过flatMap实现这一点,限制其并发性,但还需要在后台调度程序上运行一个内部observeable来进行文件传输:

 fileNames
 .flatMap(name -> {
      return Observable.fromCallable(() -> {
          // put your blocking download code here, save the data
          return name; // return what you need down below
      })
      .subscribeOn(Schedulers.io());
 }, 3)
 .observeOn(AndroidSchedulers.mainThread())
 .subscribe(completedFile -> { }, error -> { }, 
      () -> { /* all completed.*/ });
编辑:

由于您正在使用可观察的API进行网络下载,因此无需阻止:

Observable.from(audioFiles)
.flatMap(audioFile -> 
     audioFile.subscribeOn(Schedulers.io()),  // <-- apply extra transforms here
     MAX_CONCURRENT)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(completedFile -> { }, error -> { }, 
    () -> { /* all completed.*/ })
Observable.from(音频文件)
.flatMap(音频文件->
audioFile.subscribeOn(Schedulers.io()),//{},错误->{},
()->{/*全部完成。*/})

目前尚不清楚您如何使用
CallbackHandling

您可以通过flatMap实现这一点,限制其并发性,但还需要在执行文件传输的后台调度程序上运行一个内部可观察程序:

 fileNames
 .flatMap(name -> {
      return Observable.fromCallable(() -> {
          // put your blocking download code here, save the data
          return name; // return what you need down below
      })
      .subscribeOn(Schedulers.io());
 }, 3)
 .observeOn(AndroidSchedulers.mainThread())
 .subscribe(completedFile -> { }, error -> { }, 
      () -> { /* all completed.*/ });
编辑:

由于您正在使用可观察的API进行网络下载,因此无需阻止:

Observable.from(audioFiles)
.flatMap(audioFile -> 
     audioFile.subscribeOn(Schedulers.io()),  // <-- apply extra transforms here
     MAX_CONCURRENT)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(completedFile -> { }, error -> { }, 
    () -> { /* all completed.*/ })
Observable.from(音频文件)
.flatMap(音频文件->
audioFile.subscribeOn(Schedulers.io()),//{},错误->{},
()->{/*全部完成。*/})
您如何处理
回调操作
,目前尚不清楚