observeOn
заставит все операции под ним запускаться в потоке из планировщика, который вы передаете в качестве его параметра.В этом случае вы заставляете подписку работать в основном потоке.Прочитайте this для получения дополнительной информации.
Livedata
имеет два способа обновления его значения: вы либо делаете livedata.setValue(newValue)
(livedata.value = newValue
в Kotlin) или livedata.postValue(newValue)
.Первый вариант работает только в основном потоке.С другой стороны, postValue
обычно используется для установки значения из фонового потока (фоновый поток фактически отправляет задачу в основной поток для обновления значения).
Учитывая все это, в данном случае, поскольку вы используете postValue
, вам не нужно форсировать подписку в главном потоке.Однако обратите внимание, что, поскольку postValue
не является синхронным, его вызов из основного потока не гарантирует немедленного выполнения.Например, в вашем подписчике, если вы позвоните livedata.postValue(newValue)
, а затем livedata.setValue(anotherValue)
, сначала будет выполняться setValue
.Другими словами, ваше livedata
значение будет установлено на anotherValue
, а затем переопределено на newValue
.Если вы хотите сохранить выполнение в главном потоке, используйте setValue
.