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.