前段時(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:表示開始計(jì)時(shí)的時(shí)間材鹦,例如想從0開始(如果你暫停計(jì)時(shí)逝淹,可記錄暫停時(shí)的時(shí)間,然后點(diǎn)擊開始的時(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)然也開業(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();