RxJava и планировщики
#разработка #начинающим
Сегодня реактивный подход используют для многих частей в проекте. Порой удивляешься, насколько разработчики пытаются использовать RxJava для всего, что только можно. Однако, на мой взгляд, наилучший вариант использования RxJava - работа с асинхронными операциями.
Для начала работы с многопоточностью используются операторы
Например, в приложении есть метод
Кроме этого есть дополнительные Scheduler’ы, которые важно применять с пониманием:
•
•
•
•
•
•
Важно правильно применять Scheduler’ы для каждой операции, так как их неверное применение может привести к росту числа потоков и замедлению приложения.
Надеюсь, что эта шпаргалка поможет лучше понимать логику работы с Scheduler в RxJava.
#разработка #начинающим
Сегодня реактивный подход используют для многих частей в проекте. Порой удивляешься, насколько разработчики пытаются использовать RxJava для всего, что только можно. Однако, на мой взгляд, наилучший вариант использования RxJava - работа с асинхронными операциями.
Для начала работы с многопоточностью используются операторы
subscribeOn()
и observeOn()
, а также планировщики (Schedulers). Например, в приложении есть метод
getNames()
, который возвращает список имен в приложение с сервера, после чего нам надо показать эти имена в списке. Для того, чтобы выполнить этот запрос в отдельном потоке мы должны использовать оператор subscribeOn()
и указать в качестве Scheduler’а Schedulers.io()
. Для обработки у нас есть оператор observeOn()
с Scheduler’ом AndroidSchedulers.mainThread()
, что позволит нам показать эти данные в main-thread.Кроме этого есть дополнительные Scheduler’ы, которые важно применять с пониманием:
•
Schedulers.io()
— его стоит использовать для операций, которые не связаны с интенсивной нагрузкой на процессор. Он использует неограниченный пул потоков, и количество потоков может расти по мере необходимости. В нашем примере мы использовали его для доступа в сеть. Также, его используют для доступа к файлам, получения информации из базы и прочим подобным операциям.•
Schedulers.computation()
— его рекомендуют использовать для операций, которые высоко нагружают процессор: обработка изображений, огромный объем данных. Но не стоит слепо ставить его во все запросы: пул у этого планировщика ограничен количеством процессоров на устройстве. Это сделано для того, чтобы отсутствовала конкуренция за ресурсы процессора в случае выполнения нескольких операций.•
Schedulers.newThread()
— его лучше использовать для операций, которые выполняются долгосрочно в фоне. Стоит также использовать осторожно, потому что создает новый поток при каждой обработке элемента.•
Schedulers.single()
— его стоит использовать в случае последовательного выполнения задач. Например, если вам важно, чтобы две задачи не выполнялись одновременно в приложении. Тоже не самый частый сценарий.•
Schedulers.from(Executor executor)
— можно написать собственный Executor и описать логику распределения потоков. Например, вы хотите ограничить количество запросов в сеть или в базу данных. Тогда можно использовать этот планировщик, это значительно упростит задачу.•
AndroidSchedulers.mainThread()
— используйте его, чтобы выполнить операцию в main-thread. В нашем примере — это показ списка имен на экран.Важно правильно применять Scheduler’ы для каждой операции, так как их неверное применение может привести к росту числа потоков и замедлению приложения.
Надеюсь, что эта шпаргалка поможет лучше понимать логику работы с Scheduler в RxJava.