@foonfyrick

RxJava2 onBackpressureBuffer() действие, параметры, буфер?

В общем, есть такой код:
MyRetrofit.api.getPostsFlowable()
            .onBackpressureBuffer()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe {
            Log.e("onFlowable",it.toString())
        }

Я получаю список данных с https://jsonplaceholder.typicode.com/posts
Весь этот список я вывожу в логи.
В этом примере меня интересует строка onBackpressureBuffer(), потому что как я ни старался, не вижу как она работает.
Я прочитал, то что буфер это - линейная последовательность данных примитивного типа, как я понял, это те данные, которые я вывожу. В observeOn поумолчанию буфер = 128(чего-то там, так и не понял чего), так вот, в onBackpressureBuffer() можно задать параметры:
1) capacity() - размер буфера при достижении которого будет уведомление о BufferOverflowException, но, какое-бы я число не ставил, ничего нигде не появляется.
2) BackpressureOverflowStrategy - стратегия, определяющая поведение при достижении заданной емкости буфера.
Так вот, как мне отредактировать выше-написанный код, чтобы я увидел, что происходит, если буфер доходит до указанной отметки? Как его переполнить, чтобы я увидел разницу с .onBackpressureBuffer() и без?
Спасибо.
  • Вопрос задан
  • 98 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Android
Android developer at Yandex
Backpressure это такая ситуция, когда сабскрайбер(консьюмер) потребляет(обрабатывает) значения медленнее, чем эмиттер(продьюсер) их производит. Тогда события, конечно, никуда деться не могут, их надо копиь в буфер, сбрасывать(drop), или сразу при возникновении backpressure кидать ошибку. В твоей ситуации явно никакого backpressure случиться не может, тк ты просто берешь данные из сети(долго) и выводишь их в лог(быстро).
Смоделировать долгую обработку можно, сделав искусственную задержку(Thread.sleep) и сделав быстрый эмит. Например, для наглядности, создай фловабл, и закинь в него 10000 элементов в цикле. А в сабскрайбе - слип.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы