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.