3
fun updateItems(
    newItems: List<T>?,
    itemSame: (T, T) -> Boolean,
    contentSame: (T, T) -> Boolean
) {
    val diffResult =
        DiffUtil.calculateDiff(DiffCalc(this.items, newItems!!, itemSame, contentSame))
    diffResult.dispatchUpdatesTo(this)
    items = newItems
}

使用协程暂停它是一个好习惯吗?

4

1 回答 1

0

根据列表中项目的数量,DiffUtil.calculateDiff执行可能需要大量时间(超过允许的 16 毫秒)。由于您不想阻塞 UI 线程,因此您最好将此函数调用移动到另一个线程,然后在 UI 线程上调度结果。

当然,您可以使用任何您喜欢的技术:AsyncTask、RxJava 调度程序,或者使用withContext(Dispatchers.Default). 但是这种模式非常普遍,它已经在 RecyclerView 库中实现:ListAdapter。更新 with 的项目时ListAdaptersubmitList差异是在后台线程上计算的,您不需要再调用calculateDiffanddispatchUpdatesTo了。

于 2019-07-25T09:02:50.110 回答