私はよく検索しましたが、質問に対する明確な答えは見つかりませんでした。
MediatorLiveDataとMutableLiveDataの違いは何ですか?
どちらを使用するのに適した条件は何ですか。
最初に、 MutableLivedata と MediatorLivedata の関係を理解して、それらの違いを理解する必要があります。
Java.lang.Object
↳ Android.Arch.lifecycle.LiveData<T>
↳ Android.Arch.lifecycle.MutableLiveData<T>
↳ Android.Arch.lifecycle.MediatorLiveData<T>
MediatorLiveDataがMutableLiveDataのサブクラスであることは明らかです。したがって、MediatorLiveDataは、MutableLiveDataおよびLiveDataのすべてのプロパティにアクセスできます。
質問番号1は部分的に回答され、残りの回答については質問番号の最後で説明します。 2の答え。
いくつかのサンプルプロジェクトとAndroid開発者の公式サイトを調べた結果、MutableLiveDataはデータを監視するときにUIに通知するためだけに使用する必要があることがわかりました。
たとえば、2つの異なるフラグメント(Fragment1およびFragment2)に2つのSeekBarsを表示し、Fragment1から操作するときにそれらを同期させたいとします。
もう1つのシナリオは、LiveDataの2つのインスタンスがあり、それらをliveData1とliveData2と名付け、それらの放出を1つのオブジェクトliveDataMerger(MediatorLiveDataオブジェクト)にマージすることです。次に、liveData1とliveData2がliveDataMergerのソースになり、それらのいずれかに対してonChangedコールバックが呼び出されるたびに、liveDataMergerに新しい値を設定します。
LiveData liveData1 = ...;
LiveData liveData2 = ...;
MediatorLiveData liveDataMerger = new MediatorLiveData<>();
liveDataMerger.addSource(liveData1, value ->liveDataMerger.setValue(value));
liveDataMerger.addSource(liveData2, value -> liveDataMerger.setValue(value));
この場合、MutableLiveDataは使用できませんが、データを最初の例(MutableLiveDataが使用されている場合)と比較したい場合は、addSourceプロパティを使用できないため(クラス階層ごと)使用できません。
MutableLiveData は LiveData のサブクラスであり、setValueメソッドとpostValueメソッドを公開しています(2番目のメソッドはスレッドセーフです)。アクティブなオブザーバーに値をディスパッチできます。
MediatorLiveData は、他のLiveDataオブジェクト(ソース)を監視し、それらのonChangeイベントに反応することができます。これにより、イベントを伝播するタイミング、または特に何かを行うタイミングを制御できます。
次のグーグルの例を見てください。
LiveData1から出力される10個の値のみをliveDataMergerにマージすることを考えてみましょう。次に、10個の値の後、liveData1のリッスンを停止し、ソースとしてそれを削除できます。
liveDataMerger.addSource(liveData1, new Observer() { private int count = 1; @Override public void onChanged(@Nullable Integer s) { count++; liveDataMerger.setValue(s); if (count > 10) { liveDataMerger.removeSource(liveData1); } } });
MediatorLiveData のサブクラスです MutableLiveData 他のLiveDataオブジェクトを監視し、それらからのOnChangedイベントに反応できます。
たとえば、ローカルデータベースまたはネットワークから更新できるLiveDataオブジェクトがUIにある場合、次のソースをMediatorLiveDataオブジェクトに追加できます。データベースに保存されたデータに関連付けられたLiveDataオブジェクト。ネットワークからアクセスされるデータに関連付けられたLiveDataオブジェクト。アクティビティは、MediatorLiveDataオブジェクトを監視するだけで、両方のソースから更新を受信できます。
MediatorLiveData ソースを追加および削除するメソッドを提供します-
たとえば、公式ドキュメントをここで確認してください- https://developer.Android.com/reference/Android/Arch/lifecycle/MediatorLiveData
LiveDataをよく読んで、こちらで確認してください- https://medium.com/@elye.project/understanding-live-data-made-simple-a820fcd7b4d