2017-10-17 25 views
0

Je souhaite que le code observable s'exécute sur un thread différent du thread principal. Comment puis-je faire cela, je fais comme ceci:RxJava: Comment rendre observable à créer sur un thread différent du thread principal

Observable operationObservable = Observable.create(new ObservableOnSubscribe() { 
     @Override 
     public void subscribe(ObservableEmitter e) throws Exception { 
      e.onNext(longRunningOperation()); 
      e.onComplete(); 
     } 
    }) 
    .subscribeOn(Schedulers.io()) // subscribeOn the I/O thread 
    .observeOn(AndroidSchedulers.mainThread()); 
+0

Eh bien, essayez d'utiliser un autre thread dans 'observeOn'? –

+0

Vous pouvez demander à 'Observable' d'envoyer ses notifications aux observateurs sur un planificateur particulier au moyen de l'opérateur' ObserveOn'. par cela vous pouvez utiliser votre 'Scheduler' ou classe qui implémente' Scheduler' pour observer – Kathi

+0

Votre exemple fait exactement cela. 'subscribeOn' s'assurera que le corps de' ObservableOnSubscribe.subscribe' est en cours d'exécution dans l'un des threads IO du planificateur IO. – akarnokd

Répondre

2

Si vous avez besoin d'un nouveau thread pour exécuter quelque chose que vous pouvez simplement utiliser subscribeOn(Schedulers.newThread()). Une autre alternative serait de créer votre propre planificateur et exécutants, ce qui n'est vraiment pas nécessaire dans la plupart des cas.

Pour en savoir plus: link1 link2 link3