Как Scope выглядит в коде

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

Ответ

// Activity scope
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // ViewModel привязан к жизненному циклу Activity
        val viewModel by viewModels<MyViewModel>()
    }
}

// ViewModel scope
class MyViewModel : ViewModel() {
    private val scope = viewModelScope // CoroutineScope, отменяемый при очистке ViewModel

    fun fetchData() {
        scope.launch {
            // Работает пока жив ViewModel
        }
    }
}

// Компонентный scope (Dagger/Hilt)
@ActivityScoped // Живёт пока живёт Activity
class MyActivityComponent @Inject constructor()

@FragmentScoped // Живёт пока живёт Fragment
class MyFragmentComponent @Inject constructor()