Как работать с Backpressure в RxJava?

Посмотреть в Telegram: @AndroidSobes/125
Backpressure – это ситуация, когда Rx-продюсер производит больше элементов, чем может обработать консьюмер.
Например Observable создает 1000 элементов в секунду, а Observer обрабатывает 1 элемент в секунду. Observable имеет бесконечный буфер, в который будут добавляться элементы до тех пор, пока не случится OutOfMemoryError.

В случаях когда возможна ситуация backpressure, следует использовать Flowable в качестве Rx-стрима.
Flowable можно создать из Observable методом toFlowable(), который принимает объект типа BackpressureStrategy как параметр.
BackpressureStrategy – это enum, который задает стратегию обработки backpressure. Значения BackpressureStrategy:

MISSING. Продюсер не имеет стратегию работы с backpressure. В этом случае консьюмер должен решать проблему переполнения. Эта конфигурация полезна в случае, когда обработка backpressure задается операторами onBackpressure...().
Если backpressure не обрабатывается, то будет брошено исключение MissingBackpressureException.

ERROR. В случае backpressure бросается исключение MissingBackpressureException.

BUFFER. Все элементы добавляются в буфер, пока не будут обработаны консьюмером.

DROP. Все новые элементы, которые консьюмер не успевает обработать, удаляются и не доставляются консьюмеру.

LATEST. Стратегия противоположная Drop. Консьюмер получает только самый последний элемент, созданный продюсером, когда освобождается.

Подробнее про backpressure.