Sobes.tech
Junior — Middle

Kako se u vašem iskustvu vrši obrada izuzetaka unutar korutina?

sobes.tech АИ

Одговор од АИ

Obrada izuzetaka u korutinama na Androidu obično se vrši pomoću try-catch blokova unutar same korutine ili pomoću specijalnih mehanizama kao što je CoroutineExceptionHandler.

Ako dođe do izuzetka unutar korutine, on se može uhvatiti na sledeći način:

launch {
    try {
        // kod koji može izazvati izuzetak
    } catch (e: Exception) {
        // obrada izuzetka
    }
}

Za globalnu obradu neuhvaćenih izuzetaka može se koristiti CoroutineExceptionHandler:

val handler = CoroutineExceptionHandler { _, exception ->
    println("Uhvaćen $exception")
}

GlobalScope.launch(handler) {
    throw RuntimeException("Greška")
}

Važno je zapamtiti da se izuzeci u korutinama pokrenutim putem launch prenose na handler, dok će u korutinama pokrenutim putem async izuzetak biti bačen prilikom poziva await().

Stoga, pri korišćenju async, potrebno je obuhvatiti poziv await() u try-catch blok za obradu grešaka.