Что такое класс DiffUtils

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

Ответ

DiffUtils — это утилита из AndroidX, которая помогает эффективно обновлять RecyclerView. Она вычисляет разницу между старым и новым списками данных и применяет только необходимые изменения (добавление, удаление, перемещение элементов), вместо полного перерисовывания списка.

Основные классы:

  • DiffUtil.Callback — абстрактный класс для сравнения элементов
  • DiffUtil.DiffResult — содержит результаты сравнения

Пример:

val callback = object : DiffUtil.Callback() {
    override fun getOldListSize() = oldList.size
    override fun getNewListSize() = newList.size
    override fun areItemsTheSame(oldPos: Int, newPos: Int) = 
        oldList[oldPos].id == newList[newPos].id
    override fun areContentsTheSame(oldPos: Int, newPos: Int) = 
        oldList[oldPos] == newList[newPos]
}

val diffResult = DiffUtil.calculateDiff(callback)
diffResult.dispatchUpdatesTo(adapter)

Преимущества:

  • Плавная анимация изменений
  • Оптимизация производительности
  • Минимальные перерисовки