Java 具有长时间运行任务的热可完成性

Java 具有长时间运行任务的热可完成性,java,android,rx-java,rx-java2,Java,Android,Rx Java,Rx Java2,默认情况下,Completable不是热的。但我有这样一个例子,即热完全表非常有用:下载和缓存一组大文件: class DownloadManager { Completable downloadAndCacheA(); Completable downloadAndCacheB(); } Completable.merge( downloadManager.downloadAndCacheA(), downloadManager.downloadAndCacheB() ).s

默认情况下,
Completable
不是热的。但我有这样一个例子,即热完全表非常有用:下载和缓存一组大文件:

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

Completable.merge(
  downloadManager.downloadAndCacheA(),
  downloadManager.downloadAndCacheB()
).subscribe();
当文件较大时,用户可以离开应用程序并返回。因此,客户端代码可以从这些完整表中取消订阅并再次订阅。一个文件可以下载,但另一个仍在进行中。但由于<代码>可完成不是热下载,因此再次开始下载

可能的选择是:

  • 制造
  • 使用返回
    对象的hot Observable
  • 只需将
    线程
    实例与相互交互的自定义
    可完成的
    一起使用即可
由于不同的原因,我并不喜欢所有这些解决方案。有没有更好的方法来支持长时间运行的可完成任务?

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

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

你看过了吗?@akarnokd谢谢!尝试缓存,但可能以不同的方式。将再次查看缓存和CompletableSubject。