Ответ
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, кастомный — для гибкого управления.