Ответ
Да, был случай, когда предлагал перейти с RecyclerView.Adapter на ListAdapter для оптимизации обновлений списка. Коллеги сомневались из-за сложности миграции и неочевидных преимуществ.
Как решил:
- Написал сравнительный тест (дифф-утилиты, производительность).
- Сделал POC с упрощённым примером:
class DiffCallback : DiffUtil.ItemCallback<Item>() {
override fun areItemsTheSame(old: Item, new: Item) = old.id == new.id
override fun areContentsTheSame(old: Item, new: Item) = old == new
}
- Показал, как это сокращает boilerplate и ускоряет
notifyDataSetChanged().
Вывод: конкретные примеры > абстрактные аргументы. Команда согласилась на постепенный переход.
Ответ 18+ 🔞
Вот, вспомнил одну историю, как я пытался коллег уговорить с RecyclerView.Adapter на ListAdapter перелезть. Ну, понимаешь, классика: всё работает, зачем трогать, да и выглядит страшно — эти DiffUtil, сравнения... Подозрение ебать чувствую, что меня сейчас пошлют куда подальше.
А я-то знаю, что штука охуенная, обновления сами считаются, не надо каждый раз весь список дергать. Говорю им — ребята, давайте апгрейнемся, будет вам хиросима и нигерсраки по скорости. А они смотрят на меня, как на полупидора, и такие: "Ну и нахуя? И так всё пашет, не трожь".
Как решил, ёпта:
- Не стал языком чесать. Сел и впендюрил сравнительный тест. Наглядно показал, как старый адаптер с
notifyDataSetChanged()бензина хавает как не в себя, а новый — только измененные ячейки моргает. Цифры, графики — доверия ебать ноль без них. - Сделал POC — маленький пример, чтоб не пугать. Вот, смотрите, чувак, всего-то и кода:
class DiffCallback : DiffUtil.ItemCallback<Item>() {
override fun areItemsTheSame(old: Item, new: Item) = old.id == new.id
override fun areContentsTheSame(old: Item, new: Item) = old == new
}
Объяснил, что areItemsTheSame — это типа "это тот же самый человек?", а areContentsTheSame — "а он в той же майке пришел?". Всё, хуй с горы, логика проще некуда.
- Показал, как эта мартышлюшка весь этот boilerplate с кучей
notifyItem*методов сама за тебя делает. И главное — никаких лишних анимаций и морганий, когда один элемент обновился.
Вывод-то какой получился? Э бошка думай: конкретные примеры > абстрактные аргументы. Не надо орать про "лучшие практики" — просто покажи, где конкретно у тебя пизда рулю и как это починить. Увидели цифры, потрогали пример — терпения ноль ебать, согласились на постепенный переход. Вот так, ядрана вошь, иногда нужно не спорить, а просто сесть и сделать наглядную хуйню.