Quando usar postvalue [duplicado]
No seguinte trecho de código:
viewModelScope.launch {
isLoading.postValue(true)
.....
}
estamos no thread principal, porque viewModelScope.launchestá sendo executado no thread principal por padrão, o mesmo queviewModelScope.launch(dispatchers.main)
No thread principal, faz sentido usar postValue? quero dizer, não deveria ser como:isLoading.value = true ?
Eu encontrei muito desse pedaço de código na internet, é certo ou errado ??
Respostas
De acordo com a documentação:
Com base na documentação:
setValue ():
Define o valor. Se houver observadores ativos, o valor será despachado para eles. Este método deve ser chamado a partir do thread principal.
postValue ():
Publica uma tarefa em um thread principal para definir o valor fornecido. Se você chamar esse método várias vezes antes de um thread principal executar uma tarefa postada, apenas o último valor será despachado.
Então, eu sempre usaria setValue quando possível, no seu caso, como você percebeu, setValue é melhor porque você pode ter certeza de que sempre estará no Thread Principal.
No entanto, postValue também pode ser chamado a partir do thread principal, mas terá um desempenho um pouco pior.
Normalmente, existem duas maneiras de definir um valor de um objeto liveData:
- setValue ==> tópico principal
- postValue ==> outros tópicos