Cuándo usar posvalor [duplicado]
En el siguiente fragmento de código:
viewModelScope.launch {
isLoading.postValue(true)
.....
}
estamos en el hilo principal, porque viewModelScope.launchse ejecuta en el hilo principal por defecto, lo mismo queviewModelScope.launch(dispatchers.main)
En el hilo principal, ¿tiene sentido usar postValue? quiero decir, no debería ser como:isLoading.value = true ?
He encontrado un montón de este fragmento de código en Internet, ¿es correcto o incorrecto?
Respuestas
Según la documentación:
Basado en la documentación:
valor ajustado():
Establece el valor. Si hay observadores activos, se les enviará el valor. Este método debe llamarse desde el hilo principal.
postValue ():
Publica una tarea en un hilo principal para establecer el valor dado. Si llamó a este método varias veces antes de que un hilo principal ejecutara una tarea publicada, solo se enviaría el último valor.
Por lo tanto, siempre usaría setValue cuando sea posible, en su caso, como habrá notado, setValue es mejor porque puede estar seguro de que siempre estará en el hilo principal.
Sin embargo, postValue también se puede llamar desde Main Thread, pero funcionará un poco peor.
Normalmente, hay dos formas de establecer un valor de un objeto liveData:
- setValue ==> hilo principal
- postValue ==> otros hilos