Что такое SupervisorJob в корутинах

«Что такое SupervisorJob в корутинах» — вопрос из категории Coroutines и Flow, который задают на 24% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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 по умолчанию).
  • Когда нужно изолировать ошибки в независимых задачах.