Требуется ли наблюдение за постоценностью жилого? - PullRequest
2 голосов
/ 23 апреля 2019

Требуется ли соблюдение части в этом случае, или для правильной обработки достаточно указать значение в liveata.

method()
  .subscribeOn(Schedulers.io())
  .observeOn(AndroidSchedulers.mainThread())
  .subscribe(
     { liveData.postValue(it) },
     { Timber.e(it) }
  )

Ответы [ 2 ]

4 голосов
/ 23 апреля 2019

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.

0 голосов
/ 23 апреля 2019

observeOn() -> Этот метод просто изменяет поток всех операторов далее в нисходящем направлении (в последующих вызовах).

observeOn() -> Это влияет только на поток, который используется, когда наблюдаемыйподписан на него и останется в нисходящем направлении

Если вышеупомянутый случай упоминается в вопросе, если вызовы после observeOn(AndroidSchedulers.mainThread()) должны выполняться в потоке пользовательского интерфейса, в основном liveData.postValue(it) вносит некоторые изменения в потоке пользовательского интерфейса, тогдаэта строка нужна.

Если он будет удален, дальнейшие вызовы будут выполняться в потоке, порожденном методом subscribeOn().

Ниже ссылка дает хорошее объяснение метода subscribeOn () и applyOn (): https://medium.com/upday-devs/rxjava-subscribeon-vs-observeon-9af518ded53a

Надеюсь, это поможет.

...