Вопрос объясняет роль SupervisorJob и настройку областей видимости корутин.
SupervisorJob: ошибка в одной корутине не отменяет другие.
Кастомный CoroutineScope:
val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)SupervisorJob vs обычный JobОбычный Job: ошибка в дочерней корутине отменяет все корутины в scope.
SupervisorJob: отменяется только упавшая корутина.
class MyViewModel : ViewModel() {
private val customScope = CoroutineScope(
SupervisorJob() + Dispatchers.Main + CoroutineExceptionHandler { _, e ->
println("Ошибка: $e")
}
)
override fun onCleared() {
customScope.cancel() // Важно: отмена при уничтожении
}
}