За счет чего списки на телефонах эффективные

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

Ответ

RecyclerView использует паттерн ViewHolder для переиспользования элементов списка, что минимизирует создание новых View. Оптимизации:

  1. Recycling – переиспользование View при скролле
  2. LayoutManager – эффективное размещение элементов
  3. DiffUtil – умное сравнение данных для минимальных обновлений

Пример DiffUtil:

class DiffCallback(
    private val old: List<Item>,
    private val new: List<Item>
) : DiffUtil.Callback() {
    override fun getOldListSize() = old.size
    override fun getNewListSize() = new.size
    override fun areItemsTheSame(oldPos: Int, newPos: Int) = 
        old[oldPos].id == new[newPos].id
    override fun areContentsTheSame(oldPos: Int, newPos: Int) = 
        old[oldPos] == new[newPos]
}

Дополнительно помогает:

  • Предзагрузка элементов (Prefetch)
  • Фиксированный размер View (setHasFixedSize)
  • Разделение на ViewType для сложных списков