Sobes.tech
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.