簡體   English   中英

Hot Completable 可用於長時間運行的任務

[英]Hot Completable with long running tasks

默認情況下Completable不熱。 但是我有一些情況,熱 Completable 會非常有用:下載和緩存一組大文件:

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

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

當文件很大時,用戶可以離開應用程序並返回。 所以客戶端代碼可以取消訂閱這些可完成的並再次訂閱。 可以下載一個文件,但另一個文件仍在進行中。 但由於Completable不是熱下載再次開始。

可能的選擇是:

  • 使熱 Completable
  • 使用返回Object熱 Observable 。
  • 僅使用Thread實例與自定義Completable相互交互。

由於不同的原因,並不真正喜歡所有這些解決方案。 有沒有更好的方法來支持長時間運行的可完成任務?

使用高速緩存,通過akarnokd建議,可能是最簡單的方法。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM