RxJava interval 轮询

RxJava interval 轮询 取消

因为最近在使用RxJava 所以将自己所学到的一些小知识拿来和大家分享:

interval 是一种是每隔一段时间就产生一个数字,没有结束符,也就是是可以产生无限个连续的数字
其流程实例如下
这里写图片描述

使用方法如下

 //每隔两秒产生一个数字
        Observable.timer(2, 2, TimeUnit.SECONDS).subscribe(new Subscriber<Long>() {
            @Override
            public void onCompleted() {
                System.out.println("Sequence complete.");
            }

            @Override
            public void onError(Throwable e) {
                System.out.println("error:" + e.getMessage());
            }

            @Override
            public void onNext(Long aLong) {
                System.out.println("Next:" + aLong.toString());
            }
        });
          运行结果如下: 
          Next:0 
          Next:1 
          Next:2 
          Next:3 
          ……

注意:
interval操作符默认情况下是运行在一个新线程上的,当然你可以通过传入参数来修改其运行的线程。

看到上面的时候肯定有个疑问,我的轮询怎么停止?我这里介绍两种停止方式:
1:.compose()
2:unsubscribe()

1:.compose()

interval是可以跟我们的activity或fragment的生命周期来挂钩的。只需要我们写的时候添加.compose(this.bindToLifecycle())就可以跟Activity来进行绑定。实现生命周期同步。也就是Activity 的 onDestroy() 方法被调用后,Observable 的订阅关系才解除。那能不能指定在Activity其他的生命状态和订阅关系保持同步,答案是有的。就是 bindUntilEvent()方法

* ActivityEvent.CREATE: 在Activity的onCreate()方法执行后,解除绑定。

* ActivityEvent.START:在Activity的onStart()方法执行后,解除绑定。

* ActivityEvent.RESUME:在Activity的onResume()方法执行后,解除绑定。

* ActivityEvent.PAUSE: 在Activity的onPause()方法执行后,解除绑定。

* ActivityEvent.STOP:在Activity的onStop()方法执行后,解除绑定。

* ActivityEvent.DESTROY:在Activity的onDestroy()方法执行后,解除绑定。

2:使用unsubscribe()
直接接触订阅关系。

mSubscription = Observable.interval(40, TimeUnit.MILLISECONDS)
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Action1<Long>() {
                @Override
                public void call(Long aLong) {
                    if (aLong > 100) {
                        mSubscription.unsubscribe();
                        return;
                    }
                    mProgressButton.setProgress(mProgressButton.getProgress() + 1);
                }
            });

希望以上内容对大家能有帮助


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值