需求是这样的:我需要开启一个定时器A,当A定时到50秒的时候,开始开启第二个定时器B,A结束,B开始倒数10秒,每一秒发出一个通知:
然后,我用RX这样做了:
Observable<Long> observable =
Observable
.timer(50, TimeUnit.SECONDS)
.repeat(10)
.delay(1,TimeUnit.SECONDS);
subscription = observable
.observeOn(AndroidSchedulers.mainThread())
.subscribe(aLong -> {
//发通知倒计时
Log.e("note","flag");
});
想了半天,好像没啥问题,但是跑起来就有问题了,发现,50秒时挺准的,然后到了第二个定时器,也就是.repeat(10)
,最后打印的,按照理想,应该是每隔一秒打印,但是实际上相隔了好多秒!。。。
找了半天也没找出啥,难道是我理解错误这几个操作符了?求救大神!
1.repeat est une répétition, non répétée à intervalles fixes. Pour des intervalles fixes, utilisez l'intervalle
2.delay consiste à retarder la libération pour répéter après un délai, et non en fonction du paramètre de retard. répétition
3. La solution consiste à utiliser l'intervalle, qui peut spécifier le délai initial et l'intervalle de répétition, ainsi que les opérations de prise et de cartographie, prendre les 10 premiers et les convertir en compte à rebours
Je n'ai pas encore trouvé la cause, mais j'ai trouvé une version alternative :
C'est un compte à rebours, puis ajoutez simplement un délai devant :