Sobes.tech
Junior — Middle

Como definir o seu próprio contexto para ViewModelScope no Android?

sobes.tech IA

Resposta da IA

No Android, o ViewModelScope usa por padrão o contexto com o dispatcher Dispatchers.Main, o que é conveniente para trabalhar com a interface de utilizador. Para definir um contexto próprio para o ViewModelScope, pode criar o seu próprio CoroutineScope com o CoroutineContext necessário e usá-lo em vez do padrão.

Por exemplo, pode criar uma extensão para ViewModel que utilize um contexto personalizado:

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

    fun doWork() {
        customScope.launch {
            // Aqui o código é executado em Dispatchers.IO
        }
    }

    override fun onCleared() {
        super.onCleared()
        customScope.cancel() // Cancela as corrotinas ao destruir o ViewModel
    }
}

Assim, em vez de viewModelScope.launch {} use customScope.launch {} com o contexto desejado.

Se precisar alterar o contexto dentro do viewModelScope, pode usar withContext:

viewModelScope.launch {
    withContext(Dispatchers.IO) {
        // Trabalho em IO
    }
}

Mas para controlo total do contexto, é melhor criar o seu próprio CoroutineScope no ViewModel.