Kiedy używać wartości postvalue [duplicate]
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
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.
Zwykle istnieją dwa sposoby ustawienia wartości obiektu liveData:
- setValue ==> główny wątek
- postValue ==> inne wątki