【问题标题】:How to queue the same method call in Kotlin/Java如何在 Kotlin/Java 中对相同的方法调用进行排队
【发布时间】:2020-09-03 04:51:34
【问题描述】:

我使用 DiffUtil 计算 RecyclerView 中的数据变化。计算是在调度器线程上使用 RxJava 异步完成的,如下所示:

fun setResultItems(list: List<FlightResultItem>?) {
    Log.d("debugfilter", "            setResultItems of size: " + (list?.size?: 0))
    list?.let { newList ->
        Single.fromCallable { DiffUtil.calculateDiff(ResultItemDiffUtilCallback(ArrayList(newList), ArrayList(resultItems))) }
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe { diffResult ->
                    Log.d("debugfilter", "            setResultItems AFTER DIFF of size: " + (newList.size))
                    resultItems = ArrayList(newList)
                    diffResult.dispatchUpdatesTo(this)

                }.also { mCompositeSubscription?.add(it) }
    }
}

连续调用该函数时,大数据集的计算将最后完成

D: debugfilter : setResultItems of size: 113 
D: debugfilter : setResultItems of size: 7 
D: debugfilter : setResultItems AFTER DIFF of size: 7 
D: debugfilter : setResultItems AFTER DIFF of size: 113

有没有办法让方法调用排队并等待执行完成后再执行另一个?

【问题讨论】:

  • 可以使用 Schedulers.trampoline() 代替 IO 工作吗?

标签: java android android-recyclerview rx-java android-diffutils


【解决方案1】:

我认为您可以使用Scheduler.single() 来创建单线程 Worker。它将按顺序处理请求。

fun setResultItems(list: List<FlightResultItem>?) {
Log.d("debugfilter", "            setResultItems of size: " + (list?.size?: 0))
list?.let { newList ->
    Single.fromCallable { DiffUtil.calculateDiff(ResultItemDiffUtilCallback(ArrayList(newList), ArrayList(resultItems))) }
        .subscribeOn(Schedulers.single())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe { diffResult ->
            Log.d("debugfilter", "            setResultItems AFTER DIFF of size: " + (newList.size))
            resultItems = ArrayList(newList)
            diffResult.dispatchUpdatesTo(this)

        }.also { mCompositeSubscription?.add(it) }
}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多