RxJava 2.x実装タイマーの実例コード


前言
今はネットワーク層がRxJava 2.xにアップグレードされましたので、調整が必要です。RxJava 1.xとRxJava 2.xは同じRxJavaシリーズに属していますが、RxJava 2.xの部分コードの書き換えのため、RxJava 2.xとRxJava 1.xはすでに2つの異なるバージョンになりました。RxJava 2.xは性能的に優れています。特にバックプレッシャーサポートに優れています。もちろん、このテーマはRxバージョンの違いではなく、興味のある学生は自分で研究してもいいです。もちろん、2.xの1.xの違いの一つは、Subscription mSubscription、Observable.create()などの方法もSubscriptionペアには戻らない。代わりに、new Observer()の方法で一つ多く戻る。
onSubscribe(@nonNull Dispsable disposable)の方法は、Dispsable disposableは即時に私達が購読をキャンセルして使う対象をキャンセルする方法があります。

package io.reactivex.disposables;

/**
 * Represents a disposable resource.
 */
public interface Disposable {
  /**
   * Dispose the resource, the operation should be idempotent.
   */
  void dispose();

  /**
   * Returns true if this resource has been disposed.
   * @return true if this resource has been disposed
   */
  boolean isDisposed();
}

dispose():購読をキャンセルします。
isDiscposed():購読がキャンセルされたかどうかを判断する。
これらの敷物があったら、本題に入ります。
第一歩は、RxJava 2.x依存パケットを導入する。

  //rxjava2.x
  compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
  compile 'io.reactivex.rxjava2:rxjava:2.1.0'
第二ステップ、直接タイマータイプRxTimerUtilコード

/**
 * Instruction:Rxjava2.x     
 * <p>
 * Author:pei
 * Date: 2017/6/29
 * Description:
 */

public class RxTimerUtil {

  private static Disposable mDisposable;

  /** milliseconds     next  
   *
   * @param milliseconds
   * @param next
   */
  public static void timer(long milliseconds,final IRxNext next) {
    Observable.timer(milliseconds, TimeUnit.MILLISECONDS)
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Observer<Long>() {
          @Override
          public void onSubscribe(@NonNull Disposable disposable) {
            mDisposable=disposable;
          }

          @Override
          public void onNext(@NonNull Long number) {
            if(next!=null){
              next.doNext(number);
            }
          }

          @Override
          public void onError(@NonNull Throwable e) {
            //    
            cancel();
          }

          @Override
          public void onComplete() {
            //    
            cancel();
          }
        });
  }


  /**   milliseconds     next  
   *
   * @param milliseconds
   * @param next
   */
  public static void interval(long milliseconds,final IRxNext next){
    Observable.interval(milliseconds, TimeUnit.MILLISECONDS)
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Observer<Long>() {
          @Override
          public void onSubscribe(@NonNull Disposable disposable) {
            mDisposable=disposable;
          }

          @Override
          public void onNext(@NonNull Long number) {
            if(next!=null){
              next.doNext(number);
            }
          }

          @Override
          public void onError(@NonNull Throwable e) {

          }

          @Override
          public void onComplete() {

          }
        });
  }


  /**
   *     
   */
  public static void cancel(){
    if(mDisposable!=null&&!mDisposable.isDisposed()){
      mDisposable.dispose();
      LogUtil.e("====     ======");
    }
  }

  public interface IRxNext{
    void doNext(long number);
  }
}

注意したいのは、もしあなたが使用しているのが時間延長で一回実行したら、timerを呼び出した後、cancelはいらないです。コードの中でもう処理しましたので、
コールの繰り返し実行方法であれば、activityのondestroy方法で購読をキャンセルする必要があります。

@Override
  protected void onDestroy(){
    //     
    RxTimerUtil.cancel();
    LogUtil.e("====cancel====="+ DateUtil.getNowTime());
    super.onDestroy();
  }
どんな簡単で乱暴ですか?はい、今日はここまでにします。皆さんの勉強に役に立つように、私達を応援してください。