Ich möchte einen einfachen In-Memory-Cache erstellen, um Observables auszuprobieren. Ich bin jedoch steckengeblieben, weil ich nicht verstehe, wie man ein Observable erstellt. Dies ist der Code, den ich bisher bekommen habe:
%Vor% In der Methode getMovies()
möchte ich ein Observable erstellen und mein lokales Feld movieWrapper an den Abonnenten zurückgeben. Wie kann ich das machen? Ich habe versucht mit new Observable.just(movieWrapper)
, aber es führt zu einer Null-Ausnahme.
Schauen Sie sich dieses Tutorial an wie es genau das tut, wonach Sie suchen. Im Grunde verwenden Sie defer()
, um sicherzustellen, dass Sie immer die neueste Version Ihres zwischengespeicherten Objekts erhalten:
defer()
stellt sicher, dass Sie das Objekt bei subscription für die Observable
not on -Erstellung erhalten.
Beachten Sie jedoch, dass, laut dem Autor des Beitrags:
Der einzige Nachteil von defer () ist, dass es jeweils ein neues Observable erstellt Zeit bekommen Sie einen Abonnenten. create () kann für jedes die gleiche Funktion verwenden Abonnent, so ist es effizienter. Wie immer, messen Sie die Leistung und optimieren Sie bei Bedarf.
Wie bereits gesagt, hat die akzeptierte Antwort einen Nachteil
es erstellt jedes Mal ein neues Observable, wenn Sie einen Abonnenten erhalten
Aber es ist nicht der einzige.
getMovies().subscribe(...)
aufruft, bevor setCache(...)
aufgerufen wird. setCache()
kann mehrmals aufgerufen werden. Natürlich können alle in Ihrem Szenario irrelevant sein. Ich möchte dir nur einen anderen Weg zeigen (ich bin mir sicher, dass es noch viele mehr gibt).
Sie können BehaviorSubject
verwenden, um alle diese Nachteile zu beseitigen.
Sehen Sie sich das Marble-Diagramm BehaviorSubject an .
Tags und Links android rx-java rx-android