Можно ли с помощью Handler выполнить запрос в сеть

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

Ответ

Нет, Handler предназначен для работы с очередью сообщений (MessageQueue) и выполнения задач в основном (Looper) или другом потоке. Для сетевых запросов используйте OkHttp, Retrofit или HttpURLConnection в отдельном потоке (например, через Thread, AsyncTask (deprecated), Coroutine или RxJava).

Пример с Handler и Thread:

val handler = Handler(Looper.getMainLooper())
Thread {
    val response = URL("https://api.example.com/data").readText()
    handler.post { textView.text = response } // Обновляем UI в главном потоке
}.start()

Но лучше так:

lifecycleScope.launch(Dispatchers.IO) {
    val response = withContext(Dispatchers.IO) { 
        URL("https://api.example.com/data").readText() 
    }
    withContext(Dispatchers.Main) { textView.text = response }
}