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);
}
}
Based on the documentation:
Sets the value. If there are active observers, the value will be dispatched to them. This method must be called from the main thread.
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.