Можно ли отменить корутину внутри GlobalScope

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

Ответ

Да, корутину внутри GlobalScope можно отменить, но управление её жизненным циклом становится сложнее, так как GlobalScope не привязан к какому-либо Job или CoroutineScope.

Для отмены нужно сохранить ссылку на Job корутины и вызвать job.cancel():

val job = GlobalScope.launch {  
    repeat(1000) { i ->  
        delay(500)  
        println("Working $i")  
    }  
}  

// Через 2 секунды отменяем  
GlobalScope.launch {  
    delay(2000)  
    job.cancel()  
}  

Важно: GlobalScope не рекомендуется использовать в production-коде, так как это может привести к утечкам памяти. Вместо него лучше использовать CoroutineScope с привязкой к жизненному циклу (например, viewModelScope или lifecycleScope).