RxJava - 每秒发出一个可观察的

2022-09-03 17:28:46

我正在使用RxJava在Android中制作一个计时器。我需要在RxJava中创建一个计时器,每秒发出一个可观察量。我尝试了以下方法,但没有运气。对我做错了什么有什么想法吗?

Observable.interval(1000L, TimeUnit.MILLISECONDS)
          .timeInterval()
          .observeOn(AndroidSchedulers.mainThread())
          .subscribe({Log.d(LOG_TAG, "&&&& on timer") })

答案 1

您的代码似乎没有被调用。检查它是否被执行以及何时执行。在使用 时,它是完全正确的。Observable

例如,我把你的代码段放在我的:onCreate(...)MainActivity

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    Observable.interval(1000L, TimeUnit.MILLISECONDS)
            .timeInterval()
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe { Log.d("tag", "&&&& on timer") }
    // ...
}

它的工作原理是:

https://www.dropbox.com/s/jxkm5ol8l5idyji/observable_interval.png?dl=0

此外,您可能不需要,因为其本身会在指定的速率内发出连续数字,并且只是将其转换为发出发射之间经过的时间间隔。.timeInterval()Observable.interval(...).timeInterval()


答案 2

在中,您不使用操作员返回的对象。subscribe()longTimeIntervaltimeInterval()

正确版本:

.subscribe(longTimeInterval -> {
     Log.d(LOG_TAG, "&&&& on timer"); 
}

另外,我认为您根本不需要操作员。 在你的情况下,每秒都会发出一个可观察的,我想这是你想要的。 将其转换为可观察的可观察量,该可观察量保存两个事件发生之间的确切时间差,我怀疑您是否需要它。timeInterval()Observable.interval()timeInterval()


推荐