В чем разница между Observable и Flowable в RxJava 2.0?

Наблюдаемые и текущие интерфейсы кажутся одинаковыми. Почему Flowable был введен в RxJava 2.0? Когда я предпочитаю использовать Flowable над Observable?

Ответы

Ответ 1

Как указано в документации:

Небольшое сожаление о внедрении противодавления в RxJava 0.x заключается в том, что вместо того, чтобы иметь отдельный базовый реактивный класс, наблюдаемый сам был модернизирован. Основная проблема с противодавлением заключается в том, что многие горячие источники, такие как события пользовательского интерфейса, не могут быть достаточно прочным и вызвать неожиданный MissingBackpressureException (то есть, новички не ожидайте их).

Мы пытаемся исправить эту ситуацию в 2.x, имея io.reactivex.Observable без проскальзывания и новый io.reactivex.Flowable - базовый реактивный класс с защитой от противодавления.

Используйте Observable, когда у вас относительно мало элементов с течением времени (< 1000) и/или существует без риска производителя, перенасыщающего потребителей и, таким образом, вызывающего OOM.

Используйте Flowable, когда у вас относительно большое количество элементов, и вам нужно тщательно контролировать поведение Producer, чтобы избежать истощения ресурсов и/или перегруженности.