Sobes.tech
Junior — Middle

Come definire il proprio contesto per ViewModelScope in Android?

sobes.tech AI

Risposta dell'AI

In Android, ViewModelScope utilizza di default il contesto con il dispatcher Dispatchers.Main, che è comodo per lavorare con l'UI. Per definire un contesto personalizzato per ViewModelScope, puoi creare il tuo CoroutineScope con il CoroutineContext necessario e usarlo al posto di quello standard.

Ad esempio, puoi creare un'estensione per ViewModel che utilizza un contesto personalizzato:

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

    fun doWork() {
        customScope.launch {
            // Qui il codice viene eseguito in Dispatchers.IO
        }
    }

    override fun onCleared() {
        super.onCleared()
        customScope.cancel() // Annulla le coroutine alla distruzione del ViewModel
    }
}

In questo modo, invece di viewModelScope.launch {} usa customScope.launch {} con il contesto desiderato.

Se hai bisogno di cambiare il contesto all'interno di viewModelScope, puoi usare withContext:

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

Ma per un controllo completo del contesto, è meglio creare il tuo CoroutineScope nel ViewModel.