Ответ
RxJava — это библиотека реактивного программирования, основанная на Observable/Flowable, с поддержкой сложных операторов (map, flatMap и т. д.) и многопоточности через Schedulers. Kotlin Coroutines — это легковесные потоки (не Thread), встроенные в язык, с упрощённым синтаксисом для асинхронности.
Основные отличия:
- Синтаксис: Coroutines используют
suspend-функции иlaunch/async, что читается линейно. RxJava требует цепочек операторов. - Производительность: Coroutines легковеснее (меньше накладных расходов).
- Отмена: В 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 обновления).