RxJava倒计时

来源:互联网 发布:访问远程oracle数据库 编辑:程序博客网 时间:2024/06/05 02:19
private void rxJava() {    final long count = 5000 / 1000;    Observable.interval(0, 1, TimeUnit.SECONDS)//设置0延迟,每隔一秒发送一条数据            .take((int) (count + 1)) //设置总共发送的次数            .map(new Function<Long, Object>() {                @Override                public Object apply(Long aLong) throws Exception {                    return count - aLong;                }            })            .subscribeOn(Schedulers.computation())            // doOnSubscribe 执行线程由下游逻辑最近的 subscribeOn() 控制,下游没有 subscribeOn() 则跟Subscriber            // 在同一线程执行            //执行计时任务前先将 button 设置为不可点击            .doOnSubscribe(new Consumer<Disposable>() {                @Override                public void accept(Disposable disposable) throws Exception {                    linerMainTiao.setEnabled(true);//在发送数据的时候设置为不能点击                }            })            .observeOn(AndroidSchedulers.mainThread())//操作UI主要在UI线程            .subscribe(new Observer<Object>() {                @Override                public void onSubscribe(final Disposable d) {                    linerMainTiao.setOnClickListener(new View.OnClickListener() {                        @Override                        public void onClick(View v) {                            startActivity(new Intent(MainActivity.this, TestNewMainActivity                                    .class));                            finish();                            d.dispose();                        }                    });                }                @Override                public void onNext(Object value) {                    teMainDaojishi.setText(value + "");                }                @Override                public void onError(Throwable e) {                }                @Override                public void onComplete() {                    linerMainTiao.setEnabled(true);                    startActivity(new Intent(MainActivity.this, TestNewMainActivity.class));                    finish();                }            });}