Sobes.tech
Junior — Middle

Kuidas teie kogemuses toimub erandite töötlemine korutinates?

sobes.tech AI

Vastus AI-lt

Kasutades Androidis korutinide erandite haldamine toimub tavaliselt korutina sees try-catch plokkide või spetsiaalsete mehhanismide, nagu CoroutineExceptionHandler, abil.

Kui korutinas tekib erand, saab selle kinni püüda järgmiselt:

launch {
    try {
        // kood, mis võib erandi põhjustada
    } catch (e: Exception) {
        // erandi haldamine
    }
}

Globaalsete käsitlemata erandite haldamiseks saab kasutada CoroutineExceptionHandler:

val handler = CoroutineExceptionHandler { _, exception ->
    println("Kätte saadud $exception")
}

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

Oluline on meeles pidada, et launch-iga käivitatud korutinates edastatakse erandid käsitlejale, samas kui async-iga käivitatud korutinates visatakse erand välja await()-i kutsumisel.

Seetõttu, kasutades async, tuleb await()-i kutsumine katta try-catch-ga, et vigu hallata.