前言
本文介绍在 RxJava 2.x 中,采用 interval 操作符实现间隔任务。
效果图今天,我们介绍一种新的场景,轮询操作。也就是说,我们会尝试间隔一段时间就向服务器发起一次请求,在使用 RxJava 之前,该需求的实现一般有两种方式:
- 通过 Handler 发送延时消息,在 handleMessage 中请求服务器之后,再次发送一个延时消息,直到达到循环次数为止。
- 使用 Java 提供的定时器 Timer。
//Butter Knife
implementation 'com.jakewharton:butterknife:10.2.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0'
//TitleBar
implementation 'com.github.getActivity:TitleBar:8.6'
//RxJava
implementation 'io.reactivex.rxjava2:rxjava:2.2.10'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
2. 心跳处理之 RxJava 2
/**
*
* 心跳处理之 RxJava 2
*
* 在 RxJava 2.x 中,采用 interval 操作符实现间隔任务
*
*/
public class MainActivity extends BaseActivity {
private static final String TAG = "MainActivity";
private Disposable mDisposable;
@BindView(R.id.rx_operators_btn)
protected Button mRxOperatorsBtn;
@BindView(R.id.rx_operators_text)
protected TextView mRxOperatorsText;
@Override
protected int getLayoutId() {
return R.layout.activity_main;
}
@Override
protected void initView() {
}
@OnClick(R.id.rx_operators_btn)
public void onViewClicked() {
mRxOperatorsText.append("\n");
doSomething();
}
private void doSomething() {
mDisposable = Flowable.interval(1, TimeUnit.SECONDS)
.doOnNext(new Consumer() {
@Override
public void accept(@NonNull Long aLong) throws Exception {
Log.e(TAG, "accept: doOnNext : "+aLong );
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer() {
@Override
public void accept(@NonNull Long aLong) throws Exception {
Log.e(TAG, "accept: 设置文本 :"+aLong );
mRxOperatorsText.append("accept: 设置文本 :"+aLong +"\n");
}
});
}
/**
* 销毁时停止心跳
*/
@Override
protected void onDestroy() {
super.onDestroy();
if (mDisposable != null) {
mDisposable.dispose();
}
}
}