Почему нельзя работать с сетевыми запросами в MainActivity

«Почему нельзя работать с сетевыми запросами в MainActivity» — вопрос из категории Архитектура, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Работа с сетевыми запросами в MainThread (UI-потоке) приведет к ANR (Application Not Responding), так как сетевые операции блокируют поток. Android запрещает сетевые вызовы в основном потоке начиная с Honeycomb (API 11).

Используй отдельный поток или корутины:

// С корутиной
lifecycleScope.launch(Dispatchers.IO) {
    val result = api.getData()
    withContext(Dispatchers.Main) {
        updateUI(result)
    }
}

// С RxJava
api.getData()
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe { result -> updateUI(result) }