Что если пойти в сеть на главном потоке

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

Ответ

Вызов сети на главном потоке приведёт к NetworkOnMainThreadException начиная с Android 3.0 (Honeycomb). Это происходит потому, что Android запрещает долгие операции (такие как сетевые запросы) в UI-потоке, чтобы избежать задержек в отрисовке интерфейса (ANR - Application Not Responding).

Как исправить:
Используйте фоновые потоки или корутины:

// Coroutines (рекомендуется)
lifecycleScope.launch {
    val result = withContext(Dispatchers.IO) {
        // сетевой запрос
    }
    // обновляем UI с результатом
}

// Или AsyncTask (устаревший)
class NetworkTask : AsyncTask<Void, Void, String>() {
    override fun doInBackground(vararg params: Void): String {
        // сетевой запрос
    }
    override fun onPostExecute(result: String) {
        // обновляем UI
    }
}