功能:进行倒计时。
直接上代码,具体说明写在注释里面了。
//开始倒计时
final int count = 3;//倒计时3秒
Observable.interval(0, 1, TimeUnit.SECONDS)//延迟0,间隔1s,单位秒
.take(count + 1)//限制发射次数(因为倒计时要显示 3 2 1 0 四个数字)
//使用map将数字转换,这里aLong是从0开始增长的,所以减去aLong就会输出3 2 1 0这种样式
.map(new Function<Long, Long>() {
@Override
public Long apply(Long aLong) throws Exception {
return count - aLong;
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Long>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Long num) {
//接收到消息,这里需要判空,因为3秒倒计时中间如果页面结束了,会造成找不到 tvAdCountDown
if (tvAdCountDown != null) {
tvAdCountDown.setText(String.format(tvAdStringFormat, num));
}
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
//完成之后跳转到主页面
startMainActivity();
}
});