基于Rxjava實(shí)現(xiàn)輪詢定時(shí)器
本文實(shí)例為大家分享了Rxjava實(shí)現(xiàn)輪詢定時(shí)器的具體代碼,供大家參考,具體內(nèi)容如下
作用
1、實(shí)現(xiàn)了延遲若干毫秒后,執(zhí)行next操作,只執(zhí)行一次
2、實(shí)現(xiàn)了每隔若干毫秒后,執(zhí)行next操作,可執(zhí)行多次
工具類源碼
/**
* Copyright 2015-2018 Hive Box.
*/
package com.fcbox.locker.shrail.utils;
import android.support.annotation.NonNull;
import com.fcbox.locker.sdk.Locker;
import com.fcbox.locker.sdk.log.LogUtils;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
/**
* Rxjava2.x實(shí)現(xiàn)輪詢定時(shí)器.
*
* @author xuzhuyun
*/
public class RxTimerUtil {
private static Disposable mDisposable;
/**
* milliseconds毫秒后執(zhí)行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操作
*/
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();
LogUtils.e("====Rx定時(shí)器取消======");
}
}
public interface IRxNext {
void doNext(long number);
}
}
調(diào)用
調(diào)用時(shí)相應(yīng)的類需要實(shí)現(xiàn)IRxNext接口,在doNext方法中實(shí)現(xiàn)自己的邏輯即可。另外記得用完后調(diào)用cancel方法取消訂閱。
致謝
原文出處已經(jīng)找不到了,在此感謝原作者。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- java?常規(guī)輪詢長(zhǎng)輪詢Long?polling實(shí)現(xiàn)示例詳解
- Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的長(zhǎng)輪詢的示例代碼
- Java servlet通過事件驅(qū)動(dòng)進(jìn)行高性能長(zhǎng)輪詢?cè)斀?/a>
- Java?輪詢鎖使用時(shí)遇到問題解決方案
- Java?死鎖解決方案順序鎖和輪詢鎖
- Java實(shí)現(xiàn)平滑加權(quán)輪詢算法之降權(quán)和提權(quán)詳解
- Java負(fù)載均衡算法實(shí)現(xiàn)之輪詢和加權(quán)輪詢
- Java如何使用ReentrantLock實(shí)現(xiàn)長(zhǎng)輪詢
- Java 利用DeferredResult實(shí)現(xiàn)http輪詢實(shí)時(shí)返回?cái)?shù)據(jù)接口
- 告別無盡等待:Java中的輪詢終止技巧
相關(guān)文章
Android基于TextView屬性android:ellipsize實(shí)現(xiàn)跑馬燈效果的方法
這篇文章主要介紹了Android基于TextView屬性android:ellipsize實(shí)現(xiàn)跑馬燈效果的方法,涉及Android跑馬燈效果所涉及的TextView相關(guān)屬性與使用方法,需要的朋友可以參考下2016-08-08
Android?ViewPager2?+?Fragment?聯(lián)動(dòng)效果的實(shí)現(xiàn)思路
這篇文章主要介紹了Android?ViewPager2?+?Fragment?聯(lián)動(dòng),本篇主要介紹一下 ViewPager2 + Fragment聯(lián)動(dòng)效果的實(shí)現(xiàn)思路,需要的朋友可以參考下2022-12-12
Android?Studio實(shí)現(xiàn)簡(jiǎn)單補(bǔ)間動(dòng)畫
這篇文章主要為大家詳細(xì)介紹了Android?Studio實(shí)現(xiàn)簡(jiǎn)單補(bǔ)間動(dòng)畫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
Android 通過Base64上傳圖片到服務(wù)器實(shí)現(xiàn)實(shí)例
這篇文章主要介紹了Android 通過Base64上傳圖片到服務(wù)器實(shí)現(xiàn)實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-05-05
Android 限制顯示小數(shù)點(diǎn)后兩位的實(shí)現(xiàn)方法
下面小編就為大家分享一篇Android 限制顯示小數(shù)點(diǎn)后兩位的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01

