冗长的后台操作,并且具有FOR循环。循环中的每次迭代完成后,我需要更新UI。我如何才能在RX Java中实现这一目标而无需等待所有迭代完成或编写2个可观察对象?
doInBackGround() {
//step 1
List<Object> list= < time consuming logic >
//step 2
for(Object item: list) {
< time consuming logic >
updateUi();
}
}
可以使用AsyncTask / Threads完成。但我正在尝试RX
我认为您是从长时间运行的操作中获取列表的,因此您必须遍历该列表,并对列表中的每个项目再次执行长时间运行的操作。同时,当每个项目都完成了长期运行的任务后,您必须更新UI。如果您尝试执行此操作,则可以尝试类似>
Observable.fromCallable {
val list = timeConsumingLogic()
list // return the list
}.flatMap { source: List<Any>? -> Observable.fromIterable(source) } // iterate through each item
.map { item: Any? ->
// perform time consuming logic on each item
item
}
.observeOn(AndroidSchedulers.mainThread()) // do the next step in main thread
.doOnNext { item: Any? ->
// perform UI operation on each Item
}
.subscribeOn(Schedulers.io()) // start the process in a background thread
.subscribe()