1. ホーム
  2. android

[解決済み] MutableLiveDataにおけるsetValue()とpostValue()の相違点

2022-04-28 03:06:25

質問

の値を変更する方法は2つあります。 MutableLiveData . しかし setValue() & postValue() MutableLiveData .

同じ内容のドキュメントを見つけることができませんでした。

以下はそのクラスです。 MutableLiveData 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);
    }
}

解決方法は?

ドキュメントに基づきます。

setValue() :

値を設定します。アクティブなオブザーバーがいる場合、値は にディスパッチします。このメソッドはメインスレッドから呼び出す必要があります。

postValue() :

与えられた値を設定するためのタスクをメインスレッドにポストします。メインスレッドがポストされたタスクを実行する前にこのメソッドを複数回呼び出した場合、最後の値のみがディスパッチされます。

要約すると、重要な違いは次のようになります。

setValue() メソッドは、メインスレッドから呼び出す必要があります。しかし、バックグラウンドのスレッドから値を設定する必要がある場合。 postValue() を使用する必要があります。