Comment définir son propre contexte pour ViewModelScope dans Android?
sobes.tech IA
Réponse de l'IA
Dans Android, ViewModelScope utilise par défaut le contexte avec le dispatcher Dispatchers.Main, ce qui est pratique pour travailler avec l'interface utilisateur. Pour définir votre propre contexte pour ViewModelScope, vous pouvez créer votre propre CoroutineScope avec le CoroutineContext nécessaire et l'utiliser à la place de celui par défaut.
Par exemple, vous pouvez créer une extension pour ViewModel qui utilise un contexte personnalisé :
class CustomViewModel : ViewModel() {
private val customScope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
fun doWork() {
customScope.launch {
// Le code ici s'exécute dans Dispatchers.IO
}
}
override fun onCleared() {
super.onCleared()
customScope.cancel() // Annuler les coroutines lors de la destruction du ViewModel
}
}
Ainsi, au lieu de viewModelScope.launch {} utilisez customScope.launch {} avec le contexte souhaité.
Si vous souhaitez changer le contexte à l'intérieur de viewModelScope, vous pouvez utiliser withContext :
viewModelScope.launch {
withContext(Dispatchers.IO) {
// Travail en IO
}
}
Mais pour un contrôle complet du contexte, il est préférable de créer votre propre CoroutineScope dans le ViewModel.