Почему решили перейти на корутины с RxJava в проекте

Ответ

Корутины проще в использовании и читаемости кода. Они интегрированы в Kotlin и требуют меньше бойлерплейта по сравнению с RxJava. Например, замена цепочки Rx-операторов на последовательные вызовы suspend-функций:

// RxJava
Observable.fromCallable { fetchData() }
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe { showData(it) }

// Coroutines
lifecycleScope.launch {
    val data = withContext(Dispatchers.IO) { fetchData() }
    showData(data) // автоматически на Main
}

Также корутины:

  • Лучше работают с Jetpack компонентами (ViewModel, LiveData)
  • Имеют более предсказуемую отмену через Job
  • Потребляют меньше памяти
  • Поддерживают structured concurrency

Ответ 18+ 🔞

Да ты посмотри, какой тут разговор про корутины и RxJava развели! Я, честно говоря, когда впервые с RxJava столкнулся, сам от себя охуел — там столько операторов, что голова кругом, как будто в душу мать залезли и всё там перевернули. Цепочки эти, бля, бесконечные, subscribeOn, observeOn... Чувак, ты веришь, что можно запутаться так, что потом полдня ищешь, где у тебя поток не на том диспетчере работает? Пиздец, волнение ебать.

А вот корутины — это, ёпта, как глоток свежего воздуха после подвала. Смотри, как всё просто стало. Вместо этой всей ебанько-магии с Observable, ты просто пишешь lifecycleScope.launch и внутри делаешь всё последовательно, как обычный код. Хочешь в фоне поработать? withContext(Dispatchers.IO) — и всё, ты уже не на главном потоке. А потом просто возвращаешься и показываешь данные. Никаких лишних телодвижений, доверия ебать ноль к этой сложности.

И главное, что они, эти корутины, прям в язык вшиты, родные. С Jetpack компонентами, типа ViewModel, они так дружат, что просто песня. viewModelScope тебе в помощь, и не надо париться про утечки памяти — structured concurrency, эта штука, следит, чтобы когда твой экран накрылся медным тазом, все фоновые задачи тоже отменились. В RxJava с этим, бывало, такой геморрой, что мама не горюй — подписки забыл отписать, и приложение память жрёт, как не в себя.

Ну и по памяти они полегче, это факт. Не тащат за собой овердохуища обёрток и внутренних объектов. В общем, ситуация ясна: корутины — это наш выбор. RxJava, конечно, монстр мощный, но для большинства повседневных задач — это как ехать на работу на танке. Убийственно, но неоправданно.