热点可以完成长时间运行的任务

时间:2017-02-03 10:17:45

标签: java android rx-java rx-java2

默认Completable不热。但我有一个案例,其中热的Completable非常有用:下载和缓存大型文件集:

class DownloadManager {
  Completable downloadAndCacheA();
  Completable downloadAndCacheB();
}

Completable.merge(
  downloadManager.downloadAndCacheA(),
  downloadManager.downloadAndCacheB()
).subscribe();

当文件很大时,用户可以离开应用程序并返回。因此,客户端代码可以取消订阅这些补充表并再次订阅。可以下载一个文件,但另一个文件仍在进行中。但由于Completable不热,下载再次开始。

可能的选择是:

  • 制作hot Completable
  • 使用hot Observable返回Object
  • 仅使用Thread个实例与自定义Completable相互作用。

由于不同的原因,不太喜欢所有这些解决方案。是否有更好的方法来支持长期运行的可完成任务?

1 个答案:

答案 0 :(得分:1)

使用akarnokd建议的cache可能是最简单的方法。

public Completable downloadAndCache() {
   if (completable == null) {
          completable = Completable.fromAction(this::syncDownloadAndCache)
                                   .cache();
   }
   return completable;
}