2016-07-27 5 views
3

In android i Timer verwenden Aufgabe auszuführen, die alle 5 Sekunden und beginnt nach 1 Sekunde auf diese Weise wiederholt:RxJava Timer, der für immer wiederholt und kann neu gestartet und gestoppt werden jederzeit

Timer timer = new Timer(); 
    timer.scheduleAtFixedRate(new TimerTask() { 
     @Override 
     public void run() { 
      // Here is the repeated task 
     } 
    }, /*Start after*/1000, /*Repeats every*/5000); 

    // here i stop the timer 
    timer.cancel(); 

dieser Timer wird wiederholt bis i timer.cancel()

nenne ich RxJava mit RxAndroid Erweiterung

So fand ich im Internet diesen Code lerne, habe ich versucht, es und es funktioniert nicht wiederholen:

Observable.timer(3000, TimeUnit.MILLISECONDS) 
    .subscribeOn(Schedulers.newThread()) 
    .observeOn(AndroidSchedulers.mainThread()) 
    .subscribe(new Action1<Long>() { 
     @Override 
     public void call(Long aLong) { 
      // here is the task that should repeat 
     } 
    }); 

also was ist die Alternative für den Android Timer in RxJava.

+1

Ich habe gerade angefangen RxJava lernen, und ich würde gerne wissen, was eine von denen (Timer und RxJava) sein würde, besser in diesem Ansatz? Ich meine im Zusammenhang mit Leistung und Entwicklung von Geschwindigkeit –

Antwort

17

timer Der Operator gibt ein Element nach einer bestimmten Verzögerung aus und wird dann abgeschlossen. Ich denke, Sie suchen nach dem Intervall Operator.

Subscription subscription = Observable.interval(1000, 5000, TimeUnit.MILLISECONDS) 
      .subscribeOn(Schedulers.io()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Action1<Long>() { 
       public void call(Long aLong) { 
        // here is the task that should repeat 
       } 
      }); 

, wenn Sie es beenden möchten Sie auf das Abonnement nur abmelden rufen:

subscription.unsubscribe() 
+6

Sie brauchen '.subscribeOn (Schedulers.io())' im Hintergrund zu starten, weil 'Observable.interval' standardmäßig auf' Schedulers.computation() 'emittiert. –