Rxjava實(shí)現(xiàn)計(jì)時(shí)(倒計(jì)時(shí)/暫停后繼續(xù)計(jì)時(shí))

前段時(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();

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容