Wie man flatMap im Hintergrundthread ausführt

9

Ich verwende Retrofit und RxJava, um einige Hintergrundaufgaben auszuführen. Code sieht so aus:

%Vor%

Dies schlägt mit RetrofitError aufgrund von NetworkOnMainThread Exception in dieser Zeile fehl:

%Vor%

Ich abonniere mein Observable:

%Vor%

Laut Dokumentation von Rx funktioniert flatMap nicht mit einem Hintergrund-Thread. Meine Frage ist, wie stelle ich sicher, dass die gesamte getMyData() Methode im Hintergrund ausgeführt wird.

    
Igor Filippov 03.09.2015, 09:25
quelle

3 Antworten

3


Ich füge einfach observeOn(Schedulers.newThread()) vor flatMap hinzu und es funktioniert!

    
initialjie 31.03.2016 02:00
quelle
1

Dies bewegt nur einen Schritt in der Pipeline zum Hintergrund-Thread:

%Vor%

Ursprünglich hier beantwortet: Ссылка

    
Juan Bustamante 08.05.2017 20:15
quelle
0

Es besteht eine gute Chance, wenn Sie das MyLoader-Objekt im Hauptthread erstellen, das Observable.create ebenfalls ausgeführt wird (oder vielleicht woanders zuvor in Ihrem Code (?)). Wenn dies der Fall ist, hat der .subscribeOn(Schedulers.io()) keine Auswirkung auf das Ändern des Threads.

Sie können versuchen, das .create () mit einem .defer() zu umbrechen, um sicherzustellen, dass das Observable nur erstellt wird, wenn es abonniert ist.

z.B. defer(() -> create(....))

    
Diolor 07.09.2015 21:44
quelle