Quando utilizzare postvalue [duplicate]

Nov 01 2020

Nella parte di codice seguente:

    viewModelScope.launch {
  
        isLoading.postValue(true) 
            
        .....
   }

siamo nel thread principale, perché viewModelScope.launchè in esecuzione sul thread principale per impostazione predefinita, lo stesso diviewModelScope.launch(dispatchers.main)

Nel thread principale, ha senso usare postValue? Voglio dire, non dovrebbe essere come:isLoading.value = true ?

Ho trovato un sacco di questo pezzo di codice su Internet, è giusto o sbagliato?

Risposte

MerthanE Nov 02 2020 at 03:34

Secondo la documentazione:

Sulla base della documentazione:

valore impostato():

Imposta il valore. Se sono presenti osservatori attivi, il valore verrà inviato loro. Questo metodo deve essere chiamato dal thread principale.

postValue ():

Invia un'attività a un thread principale per impostare il valore specificato. Se hai chiamato questo metodo più volte prima che un thread principale eseguisse un'attività pubblicata, verrà inviato solo l'ultimo valore.

Quindi userei sempre setValue quando possibile, nel tuo caso come hai notato setValue è migliore perché puoi essere sicuro che sarà sempre sul thread principale.

Tuttavia postValue può anche essere chiamato dal thread principale, ma avrà prestazioni leggermente peggiori.

ZakariaHajja Nov 01 2020 at 19:10

Normalmente ci sono due modi per impostare un valore di un oggetto liveData:

  • setValue ==> thread principale
  • postValue ==> altri thread