Wie Sie vielleicht im reaktiven Ökosystem wissen, haben wir ein Observable , das Daten ausgibt , und einen Observer , der diese Observable-Emission abonniert (benachrichtigt wird). Nichts Seltsames ist, wie das sogenannte Observer-Muster funktioniert. Ein Observable "schreit" etwas, der Beobachter wird benachrichtigt, dass Observable in einem bestimmten Moment etwas schreit.
Stellen Sie sich LiveData
ein Observable vor, mit dem Sie die Beobachter verwalten können, die sich in einem active
Zustand befinden. Mit anderen Worten LiveData
ist ein einfaches Observable , kümmert sich aber auch um den Lebenszyklus.
Aber sehen wir uns die beiden von Ihnen angeforderten Codefälle an:
A) Live-Daten
B) RXJava
A) Dies ist eine grundlegende Implementierung von LiveData
1) Normalerweise instanziieren Sie LiveData im ViewModel, um die Orientierungsänderung beizubehalten (Sie können schreibgeschützte LiveData oder beschreibbare MutableLiveData verwenden, sodass Sie normalerweise außerhalb der Klasse LiveData verfügbar machen).
2) im OnCreate
Verfahren der Hauptaktivität (nicht das Ansichtsmodell) Sie „subscribe“ ein Observer - Objekt (in der Regel eines eine onChanged - Methode)
3) Sie starten die Methode beobachten, um die Verbindung herzustellen
Zuerst die ViewModel
(besitzt die Geschäftslogik)
class ViewModel : ViewModel() { //Point 1
var liveData: MutableLiveData<Int> = MutableLiveData()
}
Und das ist das MainActivity
(so dumm wie möglich)
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val ViewModelProvider= ViewModelProviders.of(this).get(ViewModel::class.java)
ViewModelProvider.observe(this, Observer {//Points 2 and 3
//what you want to observe
})
}
}
}
B) Dies ist die grundlegende Implementierung von RXJava
1) Sie deklarieren ein Observable
2) Sie deklarieren einen Beobachter
3) Sie abonnieren das Observable beim Observer
Observable.just(1, 2, 3, 4, 5, 6) // Point 1
.subscribe(new Subscriber() { //Points 2 & 3
@Override
public void onCompleted() {
System.out.println("Complete!");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Double value) {
System.out.println("onNext: " + value);
}
});
Insbesondere LiveData
wird mit Lifecycle
und häufig mit ViewModel
(wie wir gesehen haben) Architekturkomponenten verwendet. In LiveData
Kombination mit einem ViewModel können Sie jede Änderung im Observer in Echtzeit auf dem neuesten Stand halten, sodass die Ereignisse bei Bedarf in Echtzeit verwaltet werden. Die Verwendung LiveData
wird dringend empfohlen, um das Konzept des Lebenszyklus und die relativen Objekte LifeCycleOwner / LifeCycle zu kennen . Ich würde Ihnen auch empfehlen , sich Transformationen anzuschauen , wenn Sie sie LiveData
in realen Szenarien implementieren möchten . Hier finden Sie einige Anwendungsfälle aus der großen Commonsware .
Zum Abschluss im GrundeLiveData
ist eine vereinfachtesRXJava
, eine elegante Art und Weise Änderungen über mehrere Komponenten zu beobachtenohne explizit sogenannte Abhängigkeitsregeln zwischen den Komponentenschaffen, so dass Sie viel einfacherden Code testen und macht es viel besser lesbar. Mit RXJava können Sie die Dinge von LiveData und vieles mehr erledigen. Aufgrund der erweiterten Funktionen von RXJava können Sie sowohl LiveData für einfache Fälle verwenden als auch die gesamte Leistungsfähigkeit von RXJava nutzen und weiterhin Android-Architekturkomponenten als ViewModel verwenden . Dies bedeutet natürlich, dassRXJava
dies weitaus komplexer sein kann. Denken Sie nur, dass stattdessen Hunderte von Operatoren vorhanden sind von SwitchMap und Map von LiveData (im Moment).
RXJava Version 2 ist eine Bibliothek, die das objektorientierte Paradigma revolutionierte und eine sogenannte funktionale Methode zur Verwaltung des Programmflusses hinzufügte.