android - 如何在没有平面图的情况下使用 RxAndroid 链接两个订阅?

标签 android rx-java observable rx-android

我有一连串的事件有点像:“加载一些东西 - 显示它 - 存储它”。显示和存储当然是同时发生的(存储在后台同时显示给用户)

像这样:

myVideoService.getVideo(id)
   .compose(applySchedulers())
   .subscribe((video) -> {
      showVideo(video);
      myVideoService.storeVideo(video).subscribe();
   }, Throwable::printStackTrace)

我如何制作这条线:

myVideoService.storeVideo(video).subscribe();

原始可观察对象的一部分?我想在后台运行这个 observable 但如果我使用 flatMap 这将在显示视频之前发生,基本上阻止它。即使时间不多,我仍然不喜欢这个概念:

myVideoService.getVideo(id)
   .compose(applySchedulers())
   .flatMap((video) -> myVideoService.storeVideo(video))
   .subscribe((video) -> {
      showVideo(video);
   }, Throwable::printStackTrace)

这将在存储完成后制作 showVideo,而理想情况下这应该并排显示

在显示和存储视频不会互相阻塞的情况下,还有其他方法可以做到这一点吗?

最佳答案

问题是您在 flatMap 之前应用了调度程序,因此 flatMap 在主线程上求值。您必须分解 applySchedulers 或在它之前移动 flatMap:

myVideoService.getVideo(id)
  .subscribeOn(Schedulers.io())                   // <----------------------------------
  .flatMap((video) -> myVideoService.storeVideo(video))
  .observeOn(AndroidSchedulers.mainThread())      // <----------------------------------
  .subscribe((video) -> {
      showVideo(video);
  }, Throwable::printStackTrace);

关于android - 如何在没有平面图的情况下使用 RxAndroid 链接两个订阅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41851638/

相关文章:

android - 如何使用 rxjava 在改造 2.0 中获取请求 url?

java.util.vector 无法转换为 javax.collections.observablelist

javascript - 在 RxJS 中链接订阅

android studio 错误 : app-release-unsgined. apk 未签名

android - TestFairy:在特定用户的 session 期间没有来自 logcat 的日志

rx-java - .defer() 在 RxJava 中有什么作用?

javascript - RxJS 在分区子可观察对象之间共享父可观察对象

android - 在 TimePickerDialog 的 EditText 中显示 AM 和 PM

java - Facebook:如何使用 Graph Api 获取好友签到?

java - 如何持续观察对象直到 onError()/取消订阅