RxJava可以說是當前時分火爆的一個框架,響應式編程,鏈式調用讓代碼變得時分簡潔
- 一、首先來介紹一下他的最基本的使用Observer的使用
可以分爲三步
//1.創建一個observable 可被觀察的
Observable<String> observable=Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
if (!emitter.isDisposed()){
emitter.onNext(" test 1");
emitter.onNext(" test 2");
}
emitter.onComplete();
}
});
//2.創建一個Observer 觀察者
Observer<String> observer=new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
Log.i("lambda","onNext : "+s);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
Log.i("lambda","onComplete");
}
};
//3.觀察者通過訂閱(subscribe)被觀察者 進行綁定
observable.subscribe(observer);
}
二,使用操作符 Observable.timer和Observable.interval實現計時和指定時間間隔的輪訓任務,工具封裝如下
public class RxTimer {
private Disposable mDisposable;
/**
*milliseconds毫秒後執行next操作
* @param milliSeconds
* @param iRxNext
*/
public void timer(long milliSeconds ,final IRxNext iRxNext){
Observable.timer(milliSeconds, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Long>() {
@Override
public void onSubscribe(Disposable d) {
mDisposable=d;
}
@Override
public void onNext(Long aLong) {
if (iRxNext != null) {
iRxNext.doNext(aLong);
}
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
/**
* 每隔milliseconds毫秒後執行next操作
* @param millliseconds 間隔時間
* @param iRxNext 需要處理的操作
*/
public void interval(long millliseconds,final IRxNext iRxNext){
Observable.interval(millliseconds,TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Long>() {
@Override
public void onSubscribe(Disposable d) {
mDisposable=d;
}
@Override
public void onNext(Long aLong) {
if (iRxNext!=null){
iRxNext.doNext(aLong);
}
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
public interface IRxNext{
void doNext(long number);
}
/**
* 取消訂閱
*/
public void cancel(){
if (mDisposable!=null&&!mDisposable.isDisposed()){
mDisposable.dispose();
}
}
}
使用代碼如下
RxTimer rxTimer=new RxTimer();
/3秒後執行任務
rxTimer.timer(3000, number -> Log.i("lambda","timer= "+number));
//每間隔4秒後執行任務
rxTimer.interval(4000, number -> Log.i("lambda","interval= "+number));
@Override
protected void onDestroy() {
super.onDestroy();
//取消訂閱
if (rxTimer != null) {
rxTimer.cancel();
}
}