默认Completable
不热。但我有一个案例,其中热的Completable非常有用:下载和缓存大型文件集:
class DownloadManager {
Completable downloadAndCacheA();
Completable downloadAndCacheB();
}
Completable.merge(
downloadManager.downloadAndCacheA(),
downloadManager.downloadAndCacheB()
).subscribe();
当文件很大时,用户可以离开应用程序并返回。因此,客户端代码可以取消订阅这些补充表并再次订阅。可以下载一个文件,但另一个文件仍在进行中。但由于Completable
不热,下载再次开始。
可能的选择是:
Object
。Thread
个实例与自定义Completable
相互作用。由于不同的原因,不太喜欢所有这些解决方案。是否有更好的方法来支持长期运行的可完成任务?
答案 0 :(得分:1)
使用akarnokd建议的cache可能是最简单的方法。
public Completable downloadAndCache() {
if (completable == null) {
completable = Completable.fromAction(this::syncDownloadAndCache)
.cache();
}
return completable;
}