2016-07-27 11 views
3

アンドロイドで私はこのように1秒後、5秒ごとと開始を繰り返しタスクを実行するためにタイマーを使うに停止させることができます。RxJavaの永遠に繰り返されるタイマー、および再起動し、いつでも

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(); 

このタイマーが繰り返されます

を:私はそう私はインターネット上でこのコードを見つけ、私はそれを試してみましたが、それが繰り返しdoes notの私はRxAndroid拡張子を持つ

をRxJavaを勉強timer.cancel()

を呼び出すまで

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 
     } 
    }); 

RxJavaのアンドロイドタイマーの代わりになるものは何ですか?

+1

私はちょうどRxJavaを学び始めたと私はそれらの1(タイマとRxJavaが)されるであろう知りたいですそのアプローチでより良い?パフォーマンスと開発スピードに関連しています。 –

答えて

17

タイマオペレータは、指定された遅延の後にアイテムを発行し、完了します。私はあなたが間隔演算子を探していると思います。

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 
       } 
      }); 

あなたはそれを停止したい場合は、あなただけのサブスクリプションで購読解除を呼び出す:

subscription.unsubscribe() 
+6

デフォルトで 'Observable.interval'が' Schedulers.computation() 'で出てくるので、' .subscribeOn(Schedulers.io()) 'をバックグラウンドで起動する必要はありません。 –

関連する問題