91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

RxJava2.x實現定時器的實例代碼

發布時間:2020-10-23 00:24:50 來源:腳本之家 閱讀:166 作者:奔跑的佩恩 欄目:移動開發

前言

由于現在網絡層已經升級到RxJava2.x相關的了,所以需要做些調整。雖然RxJava1.x和RxJava2.x同屬RxJava系列,但由于RxJava2.x部分代碼的重寫,導致RxJava2.x與RxJava1.x已是兩個不同的版本,RxJava2.x在性能上更優,尤其在背壓支持上。當然,此篇重點不在Rx版本上的區別,有興趣的同學可以自行研究。當然,2.x之于1.x的區別之一是2.x中已經沒有 Subscription mSubscription, Observable.create()等方法也不再返回 Subscription對像,取而代之的是在 new Observer()方法中會多返回一個
onSubscribe(@NonNull Disposable disposable) 方法,而Disposable 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():取消訂閱

isDisposed():判斷訂閱是否已經取消

ok,有了這些鋪墊之后,我們進入正題。

第一步,導入RxJava2.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();
  }

多么簡單粗暴,好了,今天就講到這里吧,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

方正县| 阿瓦提县| 内江市| 盐边县| 汉沽区| 芜湖县| 邵阳县| 怀化市| 安庆市| 阿巴嘎旗| 芮城县| 离岛区| 沐川县| 农安县| 漳州市| 贵州省| 庄河市| 西充县| 崇文区| 陕西省| 额济纳旗| 沂南县| 泽库县| 长乐市| 沈丘县| 扶绥县| 新龙县| 府谷县| 历史| 博乐市| 中卫市| 朝阳区| 仁怀市| 重庆市| 九龙坡区| 石棉县| 古丈县| 衡阳市| 双辽市| 施甸县| 文水县|