Por ejemplo, podemos crear un objeto LiveData usando una función de construcción de liveData :
var liveData: LiveData<String> = liveData(Dispatchers.IO) { delay(1000) emit ("hello") delay(1000) emit ("world") } Esto es útil en ViewModel , creo un objeto LiveData que recibe múltiples valores de datos de una función asincrónica pesada en una línea.
Pero, ¿qué pasa si ya tengo un objeto MutableLiveData y solo quiero publicar valores allí, sin crear un nuevo objeto LiveData ? ¿Cómo puedo hacer esto?
Necesito una forma de emitir de forma asíncrona múltiples valores en el objeto MutableLiveData existente dentro de un alcance de ViewModel para finalizar automáticamente todas las tareas en ejecución cuando se borre ViewModel.
Puede publicar en MutableLiveData en una rutina iniciada desde viewModelScope .
private val myMutableLiveData = MutableLiveData<String>() fun someFun() { viewModelScope.launch { myMutableLiveData.value = “Hello” delay(500L) myMutableLiveData.value = “World” myMutableLiveData.value = someSuspendFunctionRetriever() val result = withContext(Dispatchers.IO) { someBlockingCallRetriever() } myMutableLiveData.value = result // or use post() when not on Main dispatcher: withContext(Dispatchers.IO) { val result = someBlockingCallRetriever() myMutableLiveData.post(result) } } }