Sobes.tech
Junior — Middle

Czy główny wątek może wykonywać żądania sieciowe bez blokad lub problemów z wydajnością?

sobes.tech AI

Odpowiedź od AI

W Androidzie główny (UI) wątek nie powinien wykonywać bezpośrednio żądań sieciowych, ponieważ prowadzi to do blokowania interfejsu i pogorszenia wydajności aplikacji. Operacje sieciowe mogą zająć znaczną ilość czasu, a jeśli są wykonywane w głównym wątku, aplikacja przestanie odpowiadać na działania użytkownika.

Aby zapobiec blokadom, używa się:

  • Zadania asynchroniczne (AsyncTask, choć obecnie przestarzałe)
  • Wątki (Thread, HandlerThread)
  • Biblioteki obsługujące asynchroniczność (np. Retrofit z Coroutines)
  • Kotlin Coroutines lub RxJava

Przykład z Kotlin Coroutines:

GlobalScope.launch(Dispatchers.Main) {
    val result = withContext(Dispatchers.IO) {
        // Wykonanie żądania sieciowego w tle
        fetchDataFromNetwork()
    }
    // Aktualizacja UI z wynikiem
    updateUI(result)
}

W ten sposób główny wątek nie jest blokowany, a aplikacja pozostaje responsywna.