Quando usar postvalue [duplicado]

Nov 01 2020

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

MerthanE Nov 02 2020 at 03:34

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.

ZakariaHajja Nov 01 2020 at 19:10

Normalmente, existem duas maneiras de definir um valor de um objeto liveData:

  • setValue ==> tópico principal
  • postValue ==> outros tópicos