簡體   English   中英

RxJava - 每秒發出一個可觀察量

[英]RxJava - emit an observable every second

我正在使用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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM