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

首頁 > 系統(tǒng) > Android > 正文

RxJava2.x實(shí)現(xiàn)定時(shí)器的實(shí)例代碼

2019-12-12 02:34:05
字體:
供稿:網(wǎng)友

前言

由于現(xiàn)在網(wǎng)絡(luò)層已經(jīng)升級到RxJava2.x相關(guān)的了,所以需要做些調(diào)整。雖然RxJava1.x和RxJava2.x同屬RxJava系列,但由于RxJava2.x部分代碼的重寫,導(dǎo)致RxJava2.x與RxJava1.x已是兩個不同的版本,RxJava2.x在性能上更優(yōu),尤其在背壓支持上。當(dāng)然,此篇重點(diǎn)不在Rx版本上的區(qū)別,有興趣的同學(xué)可以自行研究。當(dāng)然,2.x之于1.x的區(qū)別之一是2.x中已經(jīng)沒有 Subscription mSubscription, Observable.create()等方法也不再返回 Subscription對像,取而代之的是在 new Observer()方法中會多返回一個
onSubscribe(@NonNull Disposable disposable) 方法,而Disposable disposable即時(shí)我們?nèi)∠嗛喴玫降膶ο螅浞椒ㄓ校?/p>

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():判斷訂閱是否已經(jīng)取消

ok,有了這些鋪墊之后,我們進(jìn)入正題。

第一步,導(dǎo)入RxJava2.x依賴包

  //rxjava2.x  compile 'io.reactivex.rxjava2:rxandroid:2.0.1'  compile 'io.reactivex.rxjava2:rxjava:2.1.0'

第二步,直接上定時(shí)器類RxTimerUtil代碼

/** * Instruction:Rxjava2.x實(shí)現(xiàn)定時(shí)器 * <p> * Author:pei * Date: 2017/6/29 * Description: */public class RxTimerUtil {  private static Disposable mDisposable;  /** milliseconds毫秒后執(zhí)行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毫秒后執(zhí)行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("====定時(shí)器取消======");    }  }  public interface IRxNext{    void doNext(long number);  }}

需要注意的是,若你使用的是延時(shí)執(zhí)行一次的話,在調(diào)用 timer 后,不需要 cancel,因?yàn)槲以诖a中已經(jīng)處理好了,
如果是調(diào)用的重復(fù)執(zhí)行的方法,你需要在activity的ondestroy方法中取消訂閱,類似如下:

@Override  protected void onDestroy(){    //取消定時(shí)器    RxTimerUtil.cancel();    LogUtil.e("====cancel====="+ DateUtil.getNowTime());    super.onDestroy();  }

多么簡單粗暴,好了,今天就講到這里吧,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 双流县| 陆良县| 抚松县| 清水河县| 平谷区| 萨迦县| 塘沽区| 金乡县| 佳木斯市| 阳山县| 合山市| 揭西县| 黑河市| 前郭尔| 武隆县| 广德县| 荔波县| 嘉峪关市| 合川市| 江都市| 临漳县| 桓仁| 和田市| 扶沟县| 龙胜| 邵东县| 土默特左旗| 玉树县| 秦皇岛市| 洛浦县| 修水县| 阳春市| 安乡县| 清河县| 汪清县| 青川县| 灌阳县| 曲麻莱县| 南召县| 大兴区| 华阴市|