androidandroid-livedatamutablelivedata

Difference of setValue() & postValue() in MutableLiveData


There are two ways that make change value of MutableLiveData. But what is difference between setValue() & postValue() in MutableLiveData.

I could not find documentation for same.

Here is class MutableLiveData of Android.

package android.arch.lifecycle;

/**
 * {@link LiveData} which publicly exposes {@link #setValue(T)} and {@link #postValue(T)} method.
 *
 * @param <T> The type of data hold by this instance
 */
@SuppressWarnings("WeakerAccess")
public class MutableLiveData<T> extends LiveData<T> {
    @Override
    public void postValue(T value) {
        super.postValue(value);
    }

    @Override
    public void setValue(T value) {
        super.setValue(value);
    }
}

Solution

  • Based on the documentation:

    setValue():

    Sets the value. If there are active observers, the value will be dispatched to them. This method must be called from the main thread.

    postValue():

    Posts a task to a main thread to set the given value. If you called this method multiple times before a main thread executed a posted task, only the last value would be dispatched.

    To summarize, the key difference would be:

    setValue() method must be called from the main thread. But if you need set a value from a background thread, postValue() should be used.