Ответ
SupervisorJob — это особый вид Job, который отличается обработкой исключений в дочерних корутинах.
- Обычный
Job: если дочерняя корутина падает с исключением, оно распространяется вверх по иерархии, отменяя родителя и все другие дочерние корутины. SupervisorJob: исключение в одной дочерней корутине не влияет на другие дочерние корутины и родителя.
Пример:
val supervisorJob = SupervisorJob()
val scope = CoroutineScope(Dispatchers.IO + supervisorJob)
scope.launch {
// Если упадет — не затронет другие корутины
throw RuntimeException("Ошибка!")
}
scope.launch {
// Продолжит работу, даже если первая корутина упала
delay(1000)
println("Выполнено!")
}
Используется в viewModelScope и других сценариях, где нужно изолировать ошибки.