Был ли случай backpressure

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

Ответ

Backpressure возникает, когда производитель данных работает быстрее, чем потребитель. В Android это часто встречается при работе с RxJava/Flow, особенно в UI-потоке.

Пример с RxJava:

Observable.interval(1, TimeUnit.MILLISECONDS)
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe { /* UI обновления */ }

Здесь interval генерирует события быстрее, чем UI может их обработать, что приводит к MissingBackpressureException.

Решение — применение операторов:

  • onBackpressureBuffer() — буферизирует избыточные элементы
  • onBackpressureDrop() — отбрасывает лишние элементы
  • Flow в Kotlin Coroutines имеет встроенную поддержку backpressure через buffer(), conflate()