Slide 57
Slide 57 text
private var currentIndex = 0
fab.setOnClickListener {
clickEventSubject.onNext(it)
}
clickEventSubject
.throttleFirst(500, TimeUnit.MICROSECONDS)
.observeOn(Schedulers.io())
.map {
currentIndex++
}
.switchMap {
Observable.zip(Observable.range(0, 10),
Observable.interval(200, TimeUnit.MILLISECONDS),
BiFunction { range, _ ->
10 - range
})
}
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ index ->
tv_message.text = "Now index $currentIndex Countdown $index"
}, {})
RxJava৬ coroutines
var currentIndex = 0
fab.setOnClickListener {
CoroutineScope(Dispatchers.Default).launch {
val job = launch(Dispatchers.Main) {
10.countDown(++currentIndex)
}
job.join()
}
}
private suspend fun Int.countDown(currentIndex: Int) {
for (index in this downTo 1) { // countdown from
10 to 1
tv_message.text = "Now index $currentIndex
Countdown $index" // update text
delay(200)
}
Log.i("TEMP", "Now index $currentIndex Done!")
}
private val clickEventSubject = XXSubject.create()
CoroutineScope Dispatchers.Default launch
Observable.interval(200, TimeUnit.MILLISECONDS)
Observable.range(0, 10)
observeOn(AndroidSchedulers.mainThread())
tv_message.text = "Now index $currentIndex Countdown $index"
for (index in this downTo 1)
delay(200)
.observeOn(Schedulers.io())