1. ホーム
  2. android

[解決済み] なぜLiveDataのサブクラスとしてMutableLiveDataが存在するのか?

2022-12-18 23:28:54

質問

以下のように表示されます。 MutableLiveData とは異なり LiveData とは setValue()postValue() メソッドはpublicであるのに対し LiveData では protected になっています。

この変更のために別のクラスを作成する理由、また単にこれらのメソッドを LiveData 自体でpublicとして定義するのではなく、別のクラスを作る理由は何でしょうか?

一般的に言って、このような形式の継承(特定のメソッドの可視性を高めることが唯一の変更点)はよく知られた慣習であり、(すべてのコードにアクセスできると仮定して)それが有用である可能性のあるシナリオにはどのようなものがあるでしょうか?

どのように解決するのですか?

LiveData - Android Developer Documentation を見ると LiveData , setValue() & postValue() メソッドは公開されません。

一方 MutableLiveData - Android Developer Documentation を見ると、そのことがわかる。 MutableLiveData が拡張する LiveData の2つのマジックメソッドと、内部で LiveData 公的に で利用でき、それらは setValue() &です。 postValue() .

setValue() : 値を設定し、すべてのアクティブなオブザーバにその値を送ります。 メインスレッド .

postValue() で設定された値を上書きするために、 メインスレッドにタスクをポストします。 setValue() から呼び出されなければならない。 バックグラウンドスレッド .

では LiveData 不変 . MutableLiveDataLiveData というのは ミュータブル & スレッドセーフ .