По умолчанию Completable
не горячий. Но у меня есть случай, когда горячий Completable был бы действительно полезен: загрузка и кеширование набора больших файлов:
class DownloadManager {
Completable downloadAndCacheA();
Completable downloadAndCacheB();
}
Completable.merge(
downloadManager.downloadAndCacheA(),
downloadManager.downloadAndCacheB()
).subscribe();
Когда файлы большие, пользователь может выйти из приложения и вернуться назад. Таким образом, клиентский код может отказаться от подписки на эти дополнения и снова подписаться. Один файл можно скачать, а другой еще в процессе. Но так как Completable
не горячая загрузка начинается снова.
Возможные варианты:
- Сделайте горячим дополнением.
- Используйте горячий Observable, который возвращает
Object
. - Используйте только экземпляр
Thread
с пользовательскимиCompletable
, которые взаимодействуют друг с другом.
Не очень нравятся все эти решения по разным причинам. Есть ли лучший способ поддерживать длительные завершаемые задачи?