前段時(shí)間項(xiàng)目完成了一個(gè)音頻播放的項(xiàng)目,里面各種計(jì)時(shí),之前使用hander實(shí)現(xiàn)的,但是里面計(jì)時(shí)太多了,當(dāng)計(jì)時(shí)變?yōu)?20秒的時(shí)候,出現(xiàn)誤差,各種不準(zhǔn)確,時(shí)間越長(zhǎng) ,誤差越大。然后就想到了用RxJava中的計(jì)時(shí)。
源碼如下:
public static FlowableintervalRange(long start, long count, long initialDelay, long period, TimeUnit unit) {
return intervalRange(start, count, initialDelay, period, unit, Schedulers.computation());
}
其中start:表示開(kāi)始計(jì)時(shí)的時(shí)間,例如想從0開(kāi)始(如果你暫停計(jì)時(shí),可記錄暫停時(shí)的時(shí)間,然后點(diǎn)擊開(kāi)始的時(shí)候?qū)⑦@個(gè)值傳入便可以實(shí)現(xiàn)繼續(xù)計(jì)時(shí)了)
count:表示你需要計(jì)時(shí)總時(shí)間,記得需要在你的總時(shí)間基礎(chǔ)上+1
initialDelay:表示?初始延遲,你如你想延時(shí)多久在執(zhí)行,可以傳入你想傳入的參數(shù)
period:周期
computation:TimeUnit.SECONDS一般都會(huì)是秒,當(dāng)然也開(kāi)業(yè)是時(shí),分,天等
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();