rxjava后台进程和中间更新ui

问题描述 投票:0回答:1

冗长的后台操作,并且具有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

rx-java2 rx-android
1个回答
1
投票

我认为您是从长时间运行的操作中获取列表的,因此您必须遍历该列表,并对列表中的每个项目再次执行长时间运行的操作。同时,当每个项目都完成了长期运行的任务后,您必须更新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()
© www.soinside.com 2019 - 2024. All rights reserved.