Junior — Middle
Ako určiť vlastný kontext pre ViewModelScope v Android?
sobes.tech AI
Odpoveď od AI
V Androide ViewModelScope predvolene používa kontext s dispatcherom Dispatchers.Main, čo je vhodné na prácu s UI. Ak chcete definovať vlastný kontext pre ViewModelScope, môžete si vytvoriť vlastný CoroutineScope s potrebným CoroutineContext a použiť ho namiesto štandardného.
Napríklad môžete vytvoriť rozšírenie pre ViewModel, ktoré bude používať vlastný kontext:
class CustomViewModel : ViewModel() {
private val customScope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
fun doWork() {
customScope.launch {
// Kód sa vykonáva v Dispatchers.IO
}
}
override fun onCleared() {
super.onCleared()
customScope.cancel() // Zrušenie korutín pri zničení ViewModelu
}
}
Namiesto viewModelScope.launch {} používajte customScope.launch {} s požadovaným kontextom.
Ak chcete zmeniť kontext v rámci viewModelScope, môžete použiť withContext:
viewModelScope.launch {
withContext(Dispatchers.IO) {
// Práca v IO
}
}
Pre úplnú kontrolu nad kontextom je lepšie vytvoriť vlastný CoroutineScope v ViewModel.