В чем разница между RxJava и Kotlin Coroutines

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

Ответ

RxJava — это библиотека реактивного программирования, основанная на Observable/Flowable, с поддержкой сложных операторов (map, flatMap и т. д.) и многопоточности через Schedulers. Kotlin Coroutines — это легковесные потоки (не Thread), встроенные в язык, с упрощённым синтаксисом для асинхронности.

Основные отличия:

  1. Синтаксис: Coroutines используют suspend-функции и launch/async, что читается линейно. RxJava требует цепочек операторов.
  2. Производительность: Coroutines легковеснее (меньше накладных расходов).
  3. Отмена: В Coroutines отмена встроена (через Job), в RxJava — через Disposable.

Пример с Coroutines:

viewModelScope.launch {
    val data = async { repo.fetchData() }.await()
    updateUi(data)
}

Пример с RxJava:

repo.fetchDataRx()
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe { data -> updateUi(data) }

Когда что использовать:

  • Coroutines — для простой асинхронности (UI, сетевые запросы).
  • RxJava — для сложных потоков данных (например, чаты, real-time обновления).