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.