2

setValue()postValue()の方法を公開することによってのみLiveDataと異なり、LiveDataでは保護されているように見えます。なぜLiveDataの別個のMutableLiveDataサブクラスがありますか?

この変更のために別のクラスを作成し、単にそれらをLiveData自体にpublicとして定義するのはなぜですか?

一般的に言えば、よく知られている慣習であり、有用である可能性のあるシナリオは何か(すべてのコードにアクセスできると仮定した場合)は、継承(あるメソッドの可視性を唯一の変更とします) ?

+1

デザイン意思決定です。クライアントが内部状態を変更することができないので、 'LiveData'は不変です。したがって、スレッドセーフです – Blackbelt

答えて

4

LiveData - Android Developer Documentationには、LiveDatasetValue() & postValue()の方法が公開されていないことがわかります。 MutableLiveData - Android Developer Documentationに、あなたがそれを見ることができるのに対し

MutableLiveDataは内部 LiveDataを拡張し、また LiveDataの2つの魔法の方法が公にこの中に利用できる であり、それらはsetValue() & postValue()です。

setValue():値を設定し、すべてのアクティブオブザーバに値を送信するには、メインスレッドから呼び出す必要があります。

postValue()setValue()で設定した値を上書きするタスクをメインスレッドにポストすると、のバックグラウンドスレッドから呼び出される必要があります。

ですので、LiveDataです。です。 MutableLiveDataLiveDataであり、可変 & スレッドセーフです。

関連する問題