Что такое backpressure в RxJava

«Что такое backpressure в RxJava» — вопрос из категории Реактивное программирование, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Backpressure в RxJava — это механизм управления потоком данных между Observable (источник) и Subscriber (потребитель), когда источник генерирует данные быстрее, чем потребитель может их обработать.

Проблема: без backpressure быстрый источник может переполнить память, если подписчик не успевает обрабатывать элементы.

Решение:

  • Flowable — специальный тип, поддерживающий backpressure.
  • Стратегии обработки (BackpressureStrategy):
    • BUFFER — буферизирует элементы (риск OutOfMemoryError).
    • DROP — отбрасывает лишние элементы.
    • LATEST — оставляет только последний элемент.
    • ERROR — выбрасывает MissingBackpressureException.

Пример:

Flowable.range(1, 1_000_000)
    .onBackpressureDrop { println("Dropped: $it") }
    .observeOn(Schedulers.io())
    .subscribe { Thread.sleep(10); println(it) }

Здесь onBackpressureDrop отбрасывает элементы, если подписчик не успевает.