RxJava學習使用記錄

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();
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章