Выполняется ли обратный вызов addSource onChange для Mediator LiveData в основном потоке по умолчанию? - PullRequest
1 голос
/ 09 июля 2019

Из документации:

addSource (источник LiveData, Наблюдатель включен)

Начинает прослушивать данный источник LiveData, наблюдатель onChanged будет вызывается при изменении исходного значения.

onChanged обратный вызов будет вызываться только тогда, когда этот MediatorLiveData активен.

Если данные LiveData уже добавлены в качестве источника, но с другой Observer, исключение IllegalArgumentException.

Из исходного кода говорится, что функция addSource всегда выполняется в главном потоке.

@MainThread
public <S> void addSource(@NonNull LiveData<S> source, @NonNull Observer<? super S> onChanged) ...

Значит ли это, что обратный вызов, предоставленный методу addSource, также выполняется в основном потоке?

Я хотел бы понять это, потому что я хочу сделать setValue внутри обратного вызова и setValue должен быть запущен в главном потоке.

Я хочу сделать что-то вроде:

viewState.addSource(someLiveData) { networkResourceResult ->
    viewState.value = currentViewState().copy(showLoadingSpinner = networkResource.status)
}

Так будет ли это безопасным занятием?

1 Ответ

0 голосов
/ 09 июля 2019

Вы должны использовать метод postValue() для установки значений из рабочего потока

Вы должны вызвать метод setValue(T) для обновления объекта LiveData из основного потока.Если код выполняется в рабочем потоке, вы можете вместо этого использовать метод postValue(T) для обновления объекта LiveData.

Просмотр Обновление объектов LiveData абзац

...