前段时间项目完成了一个音频播放的项目,里面各种计时,之前使用hander实现的,但是里面计时太多了,当计时变为120秒的时候,出现误差,各种不准确,时间越长 ,误差越大。然后就想到了用RxJava中的计时。
源码如下:
public static FlowableintervalRange(long start, long count, long initialDelay, long period, TimeUnit unit) {
return intervalRange(start, count, initialDelay, period, unit, Schedulers.computation());
}
其中start:表示开始计时的时间,例如想从0开始(如果你暂停计时,可记录暂停时的时间,然后点击开始的时候将这个值传入便可以实现继续计时了)
count:表示你需要计时总时间,记得需要在你的总时间基础上+1
initialDelay:表示 初始延迟,你如你想延时多久在执行,可以传入你想传入的参数
period:周期
computation:TimeUnit.SECONDS一般都会是秒,当然也开业是时,分,天等
Disposable mDisposable = Flowable.intervalRange(starTime, answerTime +1, 0, 1, TimeUnit.SECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(aLong -> {
mTvTime.setText(aLong +"S/" +answerTime +"S");
})
.doOnComplete(() -> {
mTvTime.setText(answerTime +"S/" +answerTime +"S");
playRecordTime =answerTime;
}).subscribe();