2017-02-03 25 views
1

默認情況下Completable不熱。但我有情況下熱Completable將是非常有用:大文件下載和緩存設置:可長時間運行的任務熱完成

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

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

當文件比較大的用戶可以離開應用程序和回頭。因此,客戶端代碼可以退訂這些補充表並再次訂閱。一個文件可以下載,但另一個文件仍在進行中。但由於Completable不熱,下載重新開始。

可能的選項是:

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

因爲不同的原因,不太喜歡所有這些解決方案。是否有更好的方法來支持長時間運行的可完成任務?

+1

你有沒有看[Completable.cache(http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Completable.html#cache())和[CompletableSubject](HTTP ://reactivex.io/RxJava/2.x/javadoc/io/reactivex/subjects/CompletableSubject.html)。 – akarnokd

+0

@akarnokd謝謝!嘗試緩存但可能以不同的方式。將再次查看緩存和CompletableSubject。 – eleven

回答

1

使用cache,由akarnokd建議,可能是最簡單的方法。

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