RxJava – 每秒发出一个可观察量

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

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

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

例如,我将您的代码段放在我的MainActivity onCreate(...)中:

 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()只是将其转换为发出排放之间经过的时间间隔。

subscribe()您不使用timeInterval()运算符返回的longTimeInterval对象。

正确版本:

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

另外我认为你根本不需要timeInterval()运算符。 Observable.interval()会在你的情况下每秒发出一个observable,我想这就是你想要的。 timeInterval()将它转换为一个可以保存两个事件之间确切时间差的observable,我怀疑你是否需要它。

在Kotlin&RxJava 2.0.2中,只需定义一个带有initialDelay 0和period 1的Observable Interval,它将每秒发出一个列表项。

 val list = IntRange(0, 9).toList() val disposable = Observable .interval(0,1, TimeUnit.SECONDS) .map { i -> list[i.toInt()] } .take(list.size.toLong()) .subscribe { println("item: $it") } Thread.sleep(11000)