Какие знаешь виды Scope

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

Ответ

В Kotlin есть несколько видов Scope:

  1. Global Scope - живет пока работает приложение (не рекомендуется использовать из-за утечек памяти)
GlobalScope.launch { /* ... */ }
  1. CoroutineScope - привязан к жизненному циклу компонента
class MyActivity : AppCompatActivity(), CoroutineScope {
    override val coroutineContext = Dispatchers.Main + Job()
}
  1. ViewModelScope - автоматически отменяется при очистке ViewModel
viewModelScope.launch { /* ... */ }
  1. LifecycleScope - привязан к LifecycleOwner (Activity/Fragment)
lifecycleScope.launch { /* ... */ }
  1. viewLifecycleOwner.lifecycleScope - для Fragment (привязан к жизненному циклу View)

  2. rememberCoroutineScope() - в Compose, живет пока активен Composition

Лучшие практики:

  • Избегать GlobalScope
  • Использовать scope, соответствующие жизненному циклу компонентов
  • Для ViewModel предпочтительнее viewModelScope