Quand utiliser postvalue [duplicate]

Nov 01 2020

Dans le morceau de code suivant:

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

nous sommes dans le thread principal, car viewModelScope.launchs'exécute sur le thread principal par défaut, le même queviewModelScope.launch(dispatchers.main)

Dans le fil principal, est-il judicieux d'utiliser postValue? Je veux dire, ne devrait-il pas être comme:isLoading.value = true ?

J'ai trouvé beaucoup de ce morceau de code sur Internet, est-ce bien ou mal ??

Réponses

MerthanE Nov 02 2020 at 03:34

Selon la documentation:

Basé sur la documentation:

setValue ():

Définit la valeur. S'il y a des observateurs actifs, la valeur leur sera envoyée. Cette méthode doit être appelée à partir du thread principal.

postValue ():

Publie une tâche sur un thread principal pour définir la valeur donnée. Si vous avez appelé cette méthode plusieurs fois avant qu'un thread principal n'exécute une tâche publiée, seule la dernière valeur serait distribuée.

Donc, j'utiliserais toujours setValue lorsque c'est possible, dans votre cas, comme vous l'avez remarqué, setValue est meilleur car vous pouvez être sûr qu'il sera toujours sur le fil principal.

Cependant, postValue peut également être appelé depuis le thread principal, mais ses performances seront un peu moins bonnes.

ZakariaHajja Nov 01 2020 at 19:10

Normalement, il existe deux façons de définir la valeur d'un objet liveData:

  • setValue ==> thread principal
  • postValue ==> autres fils