Sobes.tech
Junior — Middle

Kako odrediti sopstveni kontekst za ViewModelScope u Androidu?

sobes.tech АИ

Одговор од АИ

U Androidu, ViewModelScope po default koristi kontekst sa dispatcherom Dispatchers.Main, što je zgodno za rad sa UI-jem. Da biste definisali sopstveni kontekst za ViewModelScope, možete napraviti svoj CoroutineScope sa potrebnim CoroutineContext-om i koristiti ga umesto standardnog.

Na primer, možete napraviti ekstenziju za ViewModel koja koristi prilagođeni kontekst:

class CustomViewModel : ViewModel() {
    private val customScope = CoroutineScope(SupervisorJob() + Dispatchers.IO)

    fun doWork() {
        customScope.launch {
            // Kod se izvršava u Dispatchers.IO
        }
    }

    override fun onCleared() {
        super.onCleared()
        customScope.cancel() // Otkažite korutine pri uništenju ViewModel-a
    }
}

Umesto viewModelScope.launch {} koristite customScope.launch {} sa željenim kontekstom.

Ako želite da promenite kontekst unutar viewModelScope, možete koristiti withContext:

viewModelScope.launch {
    withContext(Dispatchers.IO) {
        // Rad u IO
    }
}

Za potpunu kontrolu nad kontekstom, bolje je da napravite sopstveni CoroutineScope u ViewModel-u.