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