RxJava Android倒计时

来源:互联网 发布:可达矩阵求解过程 编辑:程序博客网 时间:2024/05/22 07:07

转载自这位大哥的:http://blog.csdn.net/qq_33375419/article/details/56479994?locationNum=6&fps=1

/**     * 使用RxJava实现倒计时     */    private void countDown() {        final long count = 30;        Observable.interval(1, TimeUnit.SECONDS)                .take(31)//计时次数                .map(new Func1<Long, Long>() {                    @Override                    public Long call(Long integer) {                        return count - integer;                    }                })                .doOnSubscribe(new Action0() {                    @Override                    public void call() {                        cutdown.setEnabled(false);                        cutdown.setBackgroundColor(Color.DKGRAY);                    }                })                .subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(new Observer<Long>() {                    @Override                    public void onCompleted() {                        cutdown.setEnabled(true);                        cutdown.setBackgroundColor(getResources().getColor(R.color.colorPrimary));                        cutdown.setText("倒计时");                    }                    @Override                    public void onError(Throwable e) {                    }                    @Override                    public void onNext(Long aLong) {                        cutdown.setText("倒计时" + aLong);                    }                });    }

其中take操作符:
take操作符和interval操作符联合使用,由于一旦interval计时开始除了解绑就无法停止,所以只有在onNext方法中计算一旦释放到30秒的时候再进行解绑从而终结该计时。但使用take操作符就简单很多了,它的意思是只释放前N项,和计时配合使用的话,就可以不用担心计时会一直执行,10秒过后它会自动结束。

原创粉丝点击