Приведи пример когда вычисление DiffUtil не стоит делать в фоновом потоке

«Приведи пример когда вычисление DiffUtil не стоит делать в фоновом потоке» — вопрос из категории UI и Views, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

DiffUtil работает эффективнее в UI-потоке, если список небольшой (~до 100 элементов). Передача данных между потоками может занять больше времени, чем само вычисление diff.

// Неоптимально для маленьких списков:
viewModelScope.launch(Dispatchers.Default) {
    val diffResult = DiffUtil.calculateDiff(MyDiffCallback(oldList, newList))
    withContext(Dispatchers.Main) {
        adapter.submitList(newList, diffResult)
    }
}

// Лучше для малых списков:
val diffResult = DiffUtil.calculateDiff(MyDiffCallback(oldList, newList))
adapter.submitList(newList, diffResult)

Для больших списков (>1000 элементов) DiffUtil стоит выносить в фоновый поток.