Sobes.tech
Junior — Middle

Kaip jūsų patirtyje vyksta išimčių apdorojimas korutinų viduje?

sobes.tech AI

Atsakymas iš AI

„Android“ korutinų klaidų tvarkymas dažniausiai atliekamas naudojant try-catch blokus pačioje korutinoje arba specialiais mechanizmais, tokiais kaip CoroutineExceptionHandler.

Jei korutinoje įvyksta išimtis, ją galima sugauti taip:

launch {
    try {
        // kodas, kuris gali iššaukti išimtį
    } catch (e: Exception) {
        // išimties tvarkymas
    }
}

Norint tvarkyti neapdorotas išimtis globaliai, galima naudoti CoroutineExceptionHandler:

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

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

Svarbu prisiminti, kad išimtys launch pradėtose korutinose perduodamos į tvarkyklę, o async pradėtose korutinose išimtis bus išmestos await() iškvietimo metu.

Todėl naudojant async, būtina apgaubti await() iškvietimą try-catch, kad būtų galima tvarkyti klaidas.