Sobes.tech
Junior — Middle

Hoe kunt u uw eigen context definiëren voor ViewModelScope in Android?

sobes.tech AI

Antwoord van AI

In Android gebruikt ViewModelScope standaard de context met de dispatcher Dispatchers.Main, wat handig is voor het werken met de UI. Om een eigen context voor ViewModelScope te definiëren, kun je je eigen CoroutineScope maken met de benodigde CoroutineContext en deze gebruiken in plaats van de standaard.

Bijvoorbeeld, je kunt een extensie voor ViewModel maken die een aangepaste context gebruikt:

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

    fun doWork() {
        customScope.launch {
            // Hier wordt de code uitgevoerd in Dispatchers.IO
        }
    }

    override fun onCleared() {
        super.onCleared()
        customScope.cancel() // Corrutines annuleren bij vernietiging van het ViewModel
    }
}

Gebruik dus in plaats van viewModelScope.launch {} de customScope.launch {} met de gewenste context.

Als je de context binnen viewModelScope wilt wijzigen, kun je withContext gebruiken:

viewModelScope.launch {
    withContext(Dispatchers.IO) {
        // Werk in IO
    }
}

Maar voor volledige controle over de context is het beter om je eigen CoroutineScope in het ViewModel te maken.