Junior — Middle
Jak určit vlastní kontext pro ViewModelScope v Androidu?
sobes.tech AI
Odpověď od AI
V Androidu ViewModelScope ve výchozím nastavením používá kontext s dispatcherem Dispatchers.Main, což je vhodné pro práci s UI. Pokud chcete definovat vlastní kontext pro ViewModelScope, můžete si vytvořit vlastní CoroutineScope s potřebným CoroutineContext a používat ho místo standardního.
Například můžete vytvořit rozšíření pro ViewModel, které bude používat vlastní kontext:
class CustomViewModel : ViewModel() {
private val customScope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
fun doWork() {
customScope.launch {
// Kód se zde provádí v Dispatchers.IO
}
}
override fun onCleared() {
super.onCleared()
customScope.cancel() // Zrušení korutin při zničení ViewModelu
}
}
Místo viewModelScope.launch {} používejte customScope.launch {} s požadovaným kontextem.
Pokud chcete změnit kontext uvnitř viewModelScope, můžete použít withContext:
viewModelScope.launch {
withContext(Dispatchers.IO) {
// Práce v IO
}
}
Pro úplnou kontrolu nad kontextem je lepší vytvořit vlastní CoroutineScope v ViewModelu.