Junior — Middle
Hogyan történik a kivételek kezelése a korutinokon belül a tapasztalatod szerint?
sobes.tech MI
Válasz az MI-től
Az Androidon lévő coroutine-okban a kivételek kezelése általában try-catch blokkokkal történik a coroutine belsejében vagy speciális mechanizmusok, például a CoroutineExceptionHandler segítségével.
Ha egy kivétel keletkezik egy coroutine-on belül, azt így lehet elkapni:
launch {
try {
// kód, amely kivételt dobhat
} catch (e: Exception) {
// kivétel kezelése
}
}
A nem kezelt kivételek globális kezeléséhez használható a CoroutineExceptionHandler:
val handler = CoroutineExceptionHandler { _, exception ->
println("Elkapva $exception")
}
GlobalScope.launch(handler) {
throw RuntimeException("Hiba")
}
Fontos megjegyezni, hogy a launch-al indított coroutine-okban a kivételek átadódnak a kezelőnek, míg az async-al indított coroutine-okban a kivétel a await() hívásakor lesz dobva.
Ezért az async használatakor a await() hívást try-catch-be kell foglalni a hibák kezelése érdekében.