Sobes.tech
Junior — Middle

¿Cómo se puede definir el propio contexto para ViewModelScope en Android?

sobes.tech AI

Respuesta de la IA

En Android, ViewModelScope utiliza por defecto el contexto con el dispatcher Dispatchers.Main, lo cual es conveniente para trabajar con la interfaz de usuario. Para definir un contexto propio para ViewModelScope, puedes crear tu propio CoroutineScope con el CoroutineContext necesario y usarlo en lugar del estándar.

Por ejemplo, puedes crear una extensión para ViewModel que utilice un contexto personalizado:

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

    fun doWork() {
        customScope.launch {
            // Aquí el código se ejecuta en Dispatchers.IO
        }
    }

    override fun onCleared() {
        super.onCleared()
        customScope.cancel() // Cancelar las corrutinas al destruir el ViewModel
    }
}

De esta forma, en lugar de viewModelScope.launch {} usa customScope.launch {} con el contexto deseado.

Si necesitas cambiar el contexto dentro de viewModelScope, puedes usar withContext:

viewModelScope.launch {
    withContext(Dispatchers.IO) {
        // Trabajo en IO
    }
}

Pero para un control completo del contexto, es mejor crear tu propio CoroutineScope en el ViewModel.