RxJava奇淫技巧-实现倒计时的功能

 /**
     * 开启倒计时。传入间隔时间,次数
     * @param time 
     * @param sum
     */
    private void startTimer(long time, int sum) {
        Observable.interval(time, TimeUnit.MILLISECONDS)
                .take(sum)
                .map(aLong -> String.valueOf(sum - aLong))
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<String>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        disposable = d;
                    }

                    @Override
                    public void onNext(String s) {
                        //我们一般会选择将相应的时间直接设置到tv上,所以这里使用map转型
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {
                        openClick();
                        setTvCode("获取验证码");
                    }
                });      
     
      
       //最后不要忘记临时中断或者使用结束时取消订阅
	 public void onDestroy() {
        if (disposable != null && !disposable.isDisposed()) {
            Log.e("demo", "关闭");
            disposable.dispose();
            disposable = null;
        }
    }

其实上面的写法我们还可以更进一步简略:

 //简略写法,是不是特别简单
private void startTimer(long time,int count) {
        disposable = Observable.timer(time, TimeUnit.MILLISECONDS)
                .take(count+1)
                .map(aLong -> String.valueOf(count - aLong))
                .observeOn(AndroidSchedulers.mainThread())
                .doOnNext(this::setTvCode)
                .doOnComplete(this::openClick).subscribe();
}

接下来我们看看效果:
Jietu20190801-120708-HD
更多Rx实用技巧及全面解析我会在以后的学习中慢慢记录,有更好的使用建议也欢迎随时评论。

发布了97 篇原创文章 · 获赞 643 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/petterp/article/details/98044770
今日推荐