使用RxJava實現定時器功能可以通過兩種方式來實現,具體實現如下:
一、使用 timer 操作符
private Disposable mDisposable; /** * 啟動定時器 */ public void startTime() { Observable.timer(10, TimeUnit.SECONDS) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<Long>() { @Override public void onSubscribe(Disposable d) { mDisposable = d; } @Override public void onNext(Long value) { //Log.d("Timer",""+value); } @Override public void onError(Throwable e) { } @Override public void onComplete() { // TODO:2017/12/1 closeTimer(); } }); } /** * 關閉定時器 */ public void closeTimer(){ if (mDisposable != null) { mDisposable.dispose(); } }
二、使用使用 interval 和 take 操作符
在1.x 中 timer 可以執行間隔邏輯,在2.x中此功能已過時,交給了 interval 操作符,當然只使用 interval 還不能實現定時器功能,必須再結合take 操作符。具體代碼如下:
private Disposable mDisposable; /** * 啟動定時器 */ public void startTime() { int count_time = 10; //總時間 Observable.interval(0, 1, TimeUnit.SECONDS) .take(count_time+1)//設置總共發送的次數 .map(new Function<Long, Long>() { @Override public Long apply(Long aLong) throws Exception { //aLong從0開始 return count_time-aLong; } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<Long>() { @Override public void onSubscribe(Disposable d) { mDisposable = d; } @Override public void onNext(Long value) { //Log.d("Timer",""+value); } @Override public void onError(Throwable e) { } @Override public void onComplete() { // TODO:2017/12/1 closeTimer(); } }); } /** * 關閉定時器 */ public void closeTimer(){ if (mDisposable != null) { mDisposable.dispose(); } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。
新聞熱點
疑難解答