Sobes.tech
Junior — Middle

Cum se poate defini propriul context pentru ViewModelScope în Android?

sobes.tech AI

Răspuns de la AI

În Android, ViewModelScope utilizează implicit contextul cu dispatcher-ul Dispatchers.Main, ceea ce este convenabil pentru lucrul cu UI-ul. Pentru a defini propriul context pentru ViewModelScope, poți crea propriul CoroutineScope cu CoroutineContext necesar și să îl folosești în locul celui standard.

De exemplu, poți crea o extensie pentru ViewModel care utilizează un context personalizat:

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

    fun doWork() {
        customScope.launch {
            // Codul aici rulează în Dispatchers.IO
        }
    }

    override fun onCleared() {
        super.onCleared()
        customScope.cancel() // Anulează corutinele la distrugerea ViewModel-ului
    }
}

Astfel, în loc de viewModelScope.launch {} folosește customScope.launch {} cu contextul dorit.

Dacă vrei să schimbi contextul în interiorul viewModelScope, poți folosi withContext:

viewModelScope.launch {
    withContext(Dispatchers.IO) {
        // Lucru în IO
    }
}

Pentru control complet asupra contextului, este mai bine să creezi propriul CoroutineScope în ViewModel.