Ответ
SupervisorJob — это особый тип Job в Kotlin Coroutines, который позволяет дочерним корутинам завершаться с ошибкой, не отменяя родительскую и другие дочерние корутины. Полезен, например, при параллельных независимых задачах.
Пример:
val supervisorJob = SupervisorJob()
val scope = CoroutineScope(Dispatchers.IO + supervisorJob)
scope.launch {
// Эта корутина может упасть, не влияя на другие
throw Exception("Oops!")
}
scope.launch {
// Эта корутина продолжит работать
delay(1000)
println("Still alive")
}
Ключевые моменты:
- Ошибки в дочерних корутинах не распространяются на родителя
- Все равно нужно обрабатывать исключения через try/catch или CoroutineExceptionHandler
- Часто используется в ViewModel с viewModelScope (там по умолчанию SupervisorJob)