2017-02-13 4 views
0

Ich implementierte einen Service, der asynchron Daten von einem Eyetracker abruft und ein PublishSubject bereitstellt, das jeder Interessierte abonnieren kann, um einen Strom der neuesten Eyetracking-Ereignisse zu erhalten.Übertragen von asynchron berechneten Daten zurück zum GUI-Thread

Was ich keine Ahnung habe ist, wie diese Ereignisse in meinen GUI-Thread gelangen (da Eyetracking ohne die Information dessen, was angezeigt wird, ziemlich nutzlos ist) und wie die empfangenen Ereignisse gedrosselt werden, damit die GUI nicht verzögert wird den Thread blockieren.

Kann mir jemand einen Hinweis geben, wie man das mit RxJava macht?

+0

Grundlegende UI-Design ist ein Hintergrund-Thread zu tun, Verarbeitung und die UI-Thread nehmen die Updates – efekctive

+0

Sie müssen mehr Informationen über Technologie geben: Ist es eine Swing App? Javafx? oder Android? –

+0

JavaFX wäre wahrscheinlich derjenige, der verwendet wird. –

Antwort

1

Reactive Extensions etwas namens Schedulers. Sie weisen einen Stream an, Threads zu ändern, auf denen er Objekte erzeugt oder beobachtet. Sie können sie über die Operatoren subscribeOn setzen, die den Stream so modifiziert, dass Ihr Producer seine Items ausgibt (mit anderen Worten, ruft die onNext Methode für seine Subscriber) oder observeOn an, der den Stream anweist, seine Beobachtungsarbeit auf dem angegebenen Scheduler zu planen.

getSomeObservable() // Observable does its work on computation scheduler 
    .observeOn(Schedulers.io()) // instructs to switch every afterwards operator to observe items on io scheduler 
    .map(...) // this callback is called on a thread provided by io scheduler 
    .filter(...) // and this as well 
    .observeOn(Schedulers.newThread()) // switch to new thread scheduler 
    .doOnNext() // new thread 
    .subscribeOn(Schedulers.computation()) // instructs to produce items on computational scheduler 
    .subscribe(...) // still scheduling this task to new thread scheduler 

Frameworks der Regel mit einem gewissen Maß an Unterstützung für rx einige Scheduler Implementierung haben, die Arbeit auf UI-Thread führt ... Android zum Beispiel eine Bibliothek, die AndroidSchedulers.mainThread() bietet das ist genau das, was Sie suchen, nur in Ihrem Rahmen

0

... Sie können Berechnungen verschieben oder IO in einen anderen Thread über subscribeOn blockieren. Sobald die Daten bereit sind, können Sie sicherstellen, dass sie bekommen über observeOn auf der Vorder- oder GUI-Thread verarbeitet bieten

Verwandte Themen