Sobes.tech
Junior — Middle

Jak je ve vašich zkušenostech zajišťována práce s výjimkami uvnitř korutin?

sobes.tech AI

Odpověď od AI

Zpracování výjimek v coroutinech na Androidu se obvykle provádí pomocí bloků try-catch uvnitř samotné coroutine nebo pomocí speciálních mechanismů, jako je CoroutineExceptionHandler.

Pokud dojde k výjimce uvnitř coroutine, lze ji zachytit takto:

launch {
    try {
        // kód, který může vyvolat výjimku
    } catch (e: Exception) {
        // zpracování výjimky
    }
}

Pro globální zpracování nedořešených výjimek lze použít CoroutineExceptionHandler:

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

GlobalScope.launch(handler) {
    throw RuntimeException("Chyba")
}

Je důležité pamatovat, že výjimky v coroutinech spuštěných přes launch jsou předávány zpracovateli, zatímco v coroutinech spuštěných přes async bude výjimka vyhozena při volání await().

Proto při použití async je třeba obalit volání await() do try-catch pro správu chyb.