Когда использовать postvalue [дубликат]
В следующем фрагменте кода:
viewModelScope.launch {
isLoading.postValue(true)
.....
}
мы находимся в основном потоке, потому что viewModelScope.launchпо умолчанию выполняется в основном потоке, так же, какviewModelScope.launch(dispatchers.main)
В основном потоке имеет смысл использовать postValue? я имею в виду, не должно быть так:isLoading.value = true ?
Я нашел много этого фрагмента кода в Интернете, это правильно или неправильно?
Ответы
По документации:
На основании документации:
setValue ():
Устанавливает значение. Если есть активные наблюдатели, значение будет отправлено им. Этот метод необходимо вызывать из основного потока.
postValue ():
Отправляет задачу в основной поток, чтобы установить заданное значение. Если вы вызываете этот метод несколько раз до того, как основной поток выполнит опубликованную задачу, будет отправлено только последнее значение.
Поэтому я бы всегда использовал setValue, когда это возможно, в вашем случае, как вы заметили, лучше setValue, потому что вы можете быть уверены, что он всегда будет в основном потоке.
Однако postValue также можно вызвать из основного потока, но он будет работать немного хуже.
Обычно есть два способа установить значение объекта liveData:
- setValue ==> основной поток
- postValue ==> другие темы