Kiedy używać wartości postvalue [duplicate]

Nov 01 2020

W poniższym fragmencie kodu:

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

jesteśmy w głównym wątku, ponieważ viewModelScope.launchdomyślnie działa w głównym wątku, tak samo jakviewModelScope.launch(dispatchers.main)

W głównym wątku, czy ma sens używanie postValue? to znaczy, czy nie powinno być tak:isLoading.value = true ?

Znalazłem dużo tego fragmentu kodu w Internecie, czy to dobrze, czy źle?

Odpowiedzi

MerthanE Nov 02 2020 at 03:34

Zgodnie z dokumentacją:

Na podstawie dokumentacji:

ustalić wartość():

Ustawia wartość. Jeśli istnieją aktywni obserwatorzy, wartość zostanie do nich wysłana. Ta metoda musi być wywołana z głównego wątku.

postValue ():

Wysyła zadanie do głównego wątku, aby ustawić daną wartość. Jeśli wywołasz tę metodę wiele razy, zanim główny wątek wykonał opublikowane zadanie, wysłana zostanie tylko ostatnia wartość.

Więc zawsze używałbym setValue, kiedy to możliwe, w twoim przypadku, jak zauważyłeś, setValue jest lepsze, ponieważ możesz być pewien, że zawsze będzie w głównym wątku.

Jednak postValue można również wywołać z głównego wątku, ale będzie działać nieco gorzej.

ZakariaHajja Nov 01 2020 at 19:10

Zwykle istnieją dwa sposoby ustawienia wartości obiektu liveData:

  • setValue ==> główny wątek
  • postValue ==> inne wątki