Для обновления списка в RecyclerView знаю три способа.
notifyDataSetChanged()
notifyItemChanged()
Использовать DiffUtils.
Может кто дать совет в каких случаях, какой способ эффективнее использовать. И если есть еще какие способы.
notifyDataSetChanged()
- заставляет обновить все элементы списка, по сути перерисовывает их все, даже если не было никаких изменений в видимых в данный момент на экране элементов. Обычно используют, когда измененных элементов в списке много и сам список довольно большой.
notifyItemChanged()
- событие изменения конкретного элемента списка, то есть по идее перерисуется только тот элемент, позицию которой передали в аргументе. Предпочтительный способ, когда мы точно знаем какие элементы в списке были изменены, тем более, по логике, если элемент в данный момент не отображается на экране, то лишний раз не будет перерисовки.
DiffUtils
- во многих источниках советуют использовать его вместо notifyDataSetChanged()
, но я как-то не увидел большого выигрыша, даже наоборот, производительность упала. Возможно не так реализовал, не спорю. Но тут по идее зависит от объема самого списка, при большом списке, думаю предпочтительнее notifyDataSetChanged()
, так как в DiffUtils
все равно нужно сравнивать поэлементно.
Виртуальный выделенный сервер (VDS) становится отличным выбором