您好,登錄后才能下訂單哦!
前言
由于現在網絡層已經升級到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(); }
多么簡單粗暴,好了,今天就講到這里吧,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。