2017-11-20 3 views
0

Ich versuche, eine komplettierbar zu erstellen und auf Hintergrund-Thread ausgeführt werden, aber es ist nicht Action ‚s run() rufen, wenn ich auf Schedulers.io()Run Standalone komplettierbar auf Hintergrund-Thread

Grundsätzlich melde mich an ich folgende durch RxAndroid tun will:

 Thread t = new Thread(new Runnable() { 
     public void run() { 
      doSomething(); 
     } 
    }); 
    t.start(); 

Mit RxAndroid ich wie folgt vorgehen:

Completable.fromAction(new Action() { 
     @Override 
     public void run() throws Exception { 
      doSomething(); 
     } 
    }).subscribeOn(Schedulers.io()); 

Es ist run() Methode wird nicht aufgerufen, wenn ich Schedulers.io() mache, aber es wird aufgerufen, wenn ich subscribe() tun.

Ich kann nicht herausfinden, warum es läuft, wenn ich für Schedulers.io() abonnieren.

Antwort

0

Stream würde nur ausgeführt, wenn es abonniert wurde. Das bedeutet, dass Ihre completeable in der Reihenfolge run() Methode, die ausgeführt werden soll, abonniert werden sollte. subscribeOn() tut nicht abonnieren Sie den Stream, es teilt nur auf dem Thread zu abonnieren.

In Ihrem Beispiel nur subscribe() bis zum Ende würde das Hinzufügen initiieren run() Methode aufgerufen werden:

 

    Completable.fromAction(new Action() { 
     @Override 
     public void run() throws Exception { 
      doSomething(); 
     } 
    }) 
    .subscribeOn(Schedulers.io()) 
    .subscribe(...); 
 
Verwandte Themen