ist es sowieso zu sagen java rx den aktuellen thread in der observeOn funktion zu verwenden? Ich schreibe Code für den Android-Syncadapter und ich möchte, dass die Ergebnisse im Sync-Adapter-Thread und nicht im Haupt-Thread beobachtet werden.Wie beobachte ich den aufrufenden Thread in Java Rx?
Ein Beispiel Netzanruf mit Retrofit + RX Java sieht ungefähr wie folgt aus:
MyRetrofitApi.getInstance().getObjects()
.subscribeOn(Schedulers.io())
.observeOn(<current_thread>)
.subscribe(new Subscriber<Object>() {
//do stuff on the sync adapter thread
}
ich versucht, mit
...
.observeOn(AndroidSchedulers.handlerThread(new Handler(Looper.myLooper())))
...
verwendet, die die gleiche Art und Weise android rx den Scheduler für den Haupt-Thread erstellt ist funktioniert aber nicht mehr, sobald ich Looper.myLooper()
für Looper.getMainLooper()
ersetze.
Ich könnte die Schedulers.newThread() aber als komplexe Synchronisierung Code mit einer Menge von Serveranrufe würde ich ständig einen neuen Thread erstellen, nur um neue Netzwerkanrufe zu feuern, die wiederum neue Threads erstellen, um mehr Netzwerkanrufe zu starten . Gibt es eine Möglichkeit, dies zu tun? Oder ist mein Ansatz völlig falsch?
Dies etwas spekulativ ist, so dass ich dies nicht als ein Posting antwort: Ab Version 2.0-beta2 setzt Retrofit die Netzwerkanfrage nicht mehr auf einen anderen Thread - siehe hier: https://github.com/square/retrofit/commit/38ce2bee70342ac1ab08115d74802d3a54d85511 Also, wenn Sie eine aktuelle Version von Nachrüsten sollte man einfach "subscribeOn" und "observeOn" überspringen können und einfach auf dem Sync Adapter Thread bleiben. Oder habe ich Ihre Frage missverstanden und Sie möchten neue Threads erstellen, aber sie sollten alle zu dem Thread zurückkehren, von dem Sie angefangen haben? –