般我们需要实现倒计时这个需求时,会使用thread+handler来实现,如果我们会使用Rxjava的话,那一切都会变得简单。首先我们要在子线程中直接使用发射器,时间间隔设置在1s,然后等主线程接收后更新UI后,倒计时结束时,恢复界面,下面给出在用户注册时获取验证码的,倒计时使用的代码demo。具体调用方法如下:
/**
* 点击获取验证码,10S倒计时,利用Rxjava进行线程切换
* @param view
*/
public void getSureCode(View view) {
Observable.create(new ObservableOnSubscribe<Integer () {
@Override
public void subscribe(ObservableEmitter<Integer emitter) throws Exception {
int i = 10;
while (i = 0) {
try {
Thread.sleep(1000);
emitter.onNext(i);
} catch (InterruptedException e) {
e.printStackTrace();
}
i--;
}
emitter.onComplete();
}
}).subscribeOn(Schedulers.io())// 此方法为上面发出事件设置线程为IO线程
.