2016-11-23 12 views
1

Ich habe Nachrichten eingehende aus Web-Socket. Dazu gehören Zustandsänderungen an einigen Objekten wir diese Zustände A, nennen B, CRxAndroid Message Queue Timeout

Nachrichten: A A B C C A

Ich interessiere mich nur in den letzten Zustand (A) und NUR nach einiger Zeit von keine Aktivität auf ws im Zusammenhang mit dieser Art von Nachrichten. Also, um irgendwie Warteschlange sie, und nach einer gewissen Inaktivität (1000ms) handeln auf dieser letzten (A) Nachricht (jede Nachricht vor dem letzten ist von keinem Interesse). Wie würde ich es mit RxAndroid implementieren? (ich habe Retrolambda bereits verdrahtet und alle Rx bezogen, haben auch ein paar Methoden einige async Sachen Arbeits)

+0

Vielleicht versuchen Sie 'debounce()' auf der beobachtbaren Nachricht A? http://reactivex.io/documentation/operators/debounce.html – vkislicins

+0

Tnx für den Betreiber, aber ein bisschen Code würde mehr helfen – miroslavign

+1

Sorry ich war in Eile und wollte mit wenigstens einem schnellen Hinweis auf etwas helfen könnte dir helfen. Entschuldigung, wenn es nicht hilfreich war. – vkislicins

Antwort

0

Sie Nachrichten basierend auf ihrem Typ filtern und dann debounce:

Observable<Message> debouncedStream = messageObservable 
.filter(message -> message.getType().equals("A")) 
.debounce(1 , TimeUnit.Seconds); 
+0

Eigentlich möchte ich sie nicht filtern, ich werde sie vor dem Gehen in diese rx Sachen vorfiltern. Ich möchte nur den letzten verwenden, nachdem keine neue Nachricht angekommen ist. – miroslavign

1

i denke, in Ihrem Fall besser .sample() zu verwenden, anstatt .debounce()

Observable<Message> debouncedStream = messageObservable 
    .samlpe(1 , TimeUnit.Seconds); 

sehen Sie den Unterschied sample und debounce

Verwandte Themen