В чем разница между GlobalScope, MainScope и кастомным Scope

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

Ответ

GlobalScope — глобальный CoroutineScope, живущий всё время работы приложения. Корутины в нём не отменяются автоматически, что может привести к утечкам памяти.

MainScope() — создает CoroutineScope с диспетчером Dispatchers.Main (UI-поток). Подходит для Android-активностей/фрагментов, но требует ручного вызова cancel() при уничтожении.

Кастомный Scope — создается через CoroutineScope(Dispatchers.X + Job()). Позволяет явно управлять жизненным циклом корутин (например, отменять их при onDestroy).

Пример:

// Кастомный Scope в Activity
class MyActivity : AppCompatActivity() {
    private val scope = CoroutineScope(Dispatchers.Main + Job())

    override fun onDestroy() {
        scope.cancel() // Отмена всех корутин
        super.onDestroy()
    }
}

Итог: GlobalScope — избегать, MainScope — для UI, кастомный — для гибкого управления.