国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

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

2019-10-22 18:33:14
字體:
來源:轉載
供稿:網友

前言

由于現在網絡層已經升級到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();  }

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

 

注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新余市| 顺义区| 阿拉尔市| 宜州市| 浦北县| 丁青县| 哈尔滨市| 安多县| 香格里拉县| 彰化市| 永吉县| 海宁市| 乃东县| 三明市| 涞源县| 高陵县| 洪湖市| 霍州市| 义马市| 麻阳| 嵊州市| 聂拉木县| 文化| 新绛县| 南通市| 无锡市| 双城市| 利辛县| 淮安市| 东丽区| 北辰区| 建阳市| 闵行区| 大同市| 宣汉县| 河西区| 青河县| 崇信县| 都兰县| 临颍县| 双江|